Merge branch 'main' of gitlab.com:bashrc2/epicyon

merge-requests/30/head
Bob Mottram 2022-07-13 17:06:32 +01:00
commit dd36ffbc28
4 changed files with 336 additions and 296 deletions

View File

@ -183,6 +183,7 @@ from webapp_confirm import html_confirm_unblock
from webapp_person_options import person_minimize_images from webapp_person_options import person_minimize_images
from webapp_person_options import person_undo_minimize_images from webapp_person_options import person_undo_minimize_images
from webapp_person_options import html_person_options from webapp_person_options import html_person_options
from webapp_timeline import text_mode_browser
from webapp_timeline import html_shares from webapp_timeline import html_shares
from webapp_timeline import html_wanted from webapp_timeline import html_wanted
from webapp_timeline import html_inbox from webapp_timeline import html_inbox
@ -655,12 +656,12 @@ class PubServer(BaseHTTPRequestHandler):
if 'audio/' in accept_str: if 'audio/' in accept_str:
if 'text/html' not in accept_str: if 'text/html' not in accept_str:
return False return False
if accept_str.startswith('*'): if accept_str.startswith('*') or 'text/html' in accept_str:
if self.headers.get('User-Agent'): if self.headers.get('User-Agent'):
if 'ELinks' in self.headers['User-Agent'] or \ if text_mode_browser(self.headers['User-Agent']):
'Lynx' in self.headers['User-Agent']:
return True return True
return False if 'text/html' not in accept_str:
return False
if 'json' in accept_str: if 'json' in accept_str:
return False return False
return True return True
@ -11751,7 +11752,8 @@ class PubServer(BaseHTTPRequestHandler):
allow_deletion: bool, allow_deletion: bool,
project_version: str, project_version: str,
yt_replace_domain: str, yt_replace_domain: str,
twitter_replacement_domain: str) -> bool: twitter_replacement_domain: str,
ua_str: str) -> bool:
"""Shows the inbox timeline """Shows the inbox timeline
""" """
if '/users/' in path: if '/users/' in path:
@ -11865,7 +11867,8 @@ class PubServer(BaseHTTPRequestHandler):
self.server.cw_lists, self.server.cw_lists,
self.server.lists_enabled, self.server.lists_enabled,
timezone, bold_reading, timezone, bold_reading,
self.server.dogwhistles) self.server.dogwhistles,
ua_str)
if getreq_start_time: if getreq_start_time:
fitness_performance(getreq_start_time, fitness_performance(getreq_start_time,
self.server.fitness, self.server.fitness,
@ -11928,7 +11931,7 @@ class PubServer(BaseHTTPRequestHandler):
getreq_start_time, getreq_start_time,
proxy_type: str, cookie: str, proxy_type: str, cookie: str,
debug: str, debug: str,
curr_session) -> bool: curr_session, ua_str: str) -> bool:
"""Shows the DMs timeline """Shows the DMs timeline
""" """
if '/users/' in path: if '/users/' in path:
@ -12036,7 +12039,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.cw_lists, self.server.cw_lists,
self.server.lists_enabled, self.server.lists_enabled,
timezone, bold_reading, timezone, bold_reading,
self.server.dogwhistles) self.server.dogwhistles, ua_str)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
@ -12088,7 +12091,7 @@ class PubServer(BaseHTTPRequestHandler):
onion_domain: str, i2p_domain: str, onion_domain: str, i2p_domain: str,
getreq_start_time, getreq_start_time,
proxy_type: str, cookie: str, debug: str, proxy_type: str, cookie: str, debug: str,
curr_session) -> bool: curr_session, ua_str: str) -> bool:
"""Shows the replies timeline """Shows the replies timeline
""" """
if '/users/' in path: if '/users/' in path:
@ -12196,7 +12199,8 @@ class PubServer(BaseHTTPRequestHandler):
self.server.cw_lists, self.server.cw_lists,
self.server.lists_enabled, self.server.lists_enabled,
timezone, bold_reading, timezone, bold_reading,
self.server.dogwhistles) self.server.dogwhistles,
ua_str)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
@ -12248,7 +12252,7 @@ class PubServer(BaseHTTPRequestHandler):
getreq_start_time, getreq_start_time,
proxy_type: str, cookie: str, proxy_type: str, cookie: str,
debug: str, debug: str,
curr_session) -> bool: curr_session, ua_str: str) -> bool:
"""Shows the media timeline """Shows the media timeline
""" """
if '/users/' in path: if '/users/' in path:
@ -12354,7 +12358,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.cw_lists, self.server.cw_lists,
self.server.lists_enabled, self.server.lists_enabled,
timezone, bold_reading, timezone, bold_reading,
self.server.dogwhistles) self.server.dogwhistles, ua_str)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
@ -12406,7 +12410,7 @@ class PubServer(BaseHTTPRequestHandler):
getreq_start_time, getreq_start_time,
proxy_type: str, cookie: str, proxy_type: str, cookie: str,
debug: str, debug: str,
curr_session) -> bool: curr_session, ua_str: str) -> bool:
"""Shows the blogs timeline """Shows the blogs timeline
""" """
if '/users/' in path: if '/users/' in path:
@ -12512,7 +12516,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.cw_lists, self.server.cw_lists,
self.server.lists_enabled, self.server.lists_enabled,
timezone, bold_reading, timezone, bold_reading,
self.server.dogwhistles) self.server.dogwhistles, ua_str)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
@ -12565,7 +12569,7 @@ class PubServer(BaseHTTPRequestHandler):
getreq_start_time, getreq_start_time,
proxy_type: str, cookie: str, proxy_type: str, cookie: str,
debug: str, debug: str,
curr_session) -> bool: curr_session, ua_str: str) -> bool:
"""Shows the news timeline """Shows the news timeline
""" """
if '/users/' in path: if '/users/' in path:
@ -12679,7 +12683,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.cw_lists, self.server.cw_lists,
self.server.lists_enabled, self.server.lists_enabled,
timezone, bold_reading, timezone, bold_reading,
self.server.dogwhistles) self.server.dogwhistles, ua_str)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
@ -12731,7 +12735,7 @@ class PubServer(BaseHTTPRequestHandler):
getreq_start_time, getreq_start_time,
proxy_type: str, cookie: str, proxy_type: str, cookie: str,
debug: str, debug: str,
curr_session) -> bool: curr_session, ua_str: str) -> bool:
"""Shows the features timeline (all local blogs) """Shows the features timeline (all local blogs)
""" """
if '/users/' in path: if '/users/' in path:
@ -12849,7 +12853,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.cw_lists, self.server.cw_lists,
self.server.lists_enabled, self.server.lists_enabled,
timezone, bold_reading, timezone, bold_reading,
self.server.dogwhistles) self.server.dogwhistles, ua_str)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
@ -12900,7 +12904,7 @@ class PubServer(BaseHTTPRequestHandler):
getreq_start_time, getreq_start_time,
proxy_type: str, cookie: str, proxy_type: str, cookie: str,
debug: str, debug: str,
curr_session) -> bool: curr_session, ua_str: str) -> bool:
"""Shows the shares timeline """Shows the shares timeline
""" """
if '/users/' in path: if '/users/' in path:
@ -12968,7 +12972,8 @@ class PubServer(BaseHTTPRequestHandler):
self.server.signing_priv_key_pem, self.server.signing_priv_key_pem,
self.server.cw_lists, self.server.cw_lists,
self.server.lists_enabled, timezone, self.server.lists_enabled, timezone,
bold_reading, self.server.dogwhistles) bold_reading, self.server.dogwhistles,
ua_str)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
@ -12994,7 +12999,7 @@ class PubServer(BaseHTTPRequestHandler):
getreq_start_time, getreq_start_time,
proxy_type: str, cookie: str, proxy_type: str, cookie: str,
debug: str, debug: str,
curr_session) -> bool: curr_session, ua_str: str) -> bool:
"""Shows the wanted timeline """Shows the wanted timeline
""" """
if '/users/' in path: if '/users/' in path:
@ -13062,7 +13067,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.cw_lists, self.server.cw_lists,
self.server.lists_enabled, self.server.lists_enabled,
timezone, bold_reading, timezone, bold_reading,
self.server.dogwhistles) self.server.dogwhistles, ua_str)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
@ -13089,7 +13094,7 @@ class PubServer(BaseHTTPRequestHandler):
getreq_start_time, getreq_start_time,
proxy_type: str, cookie: str, proxy_type: str, cookie: str,
debug: str, debug: str,
curr_session) -> bool: curr_session, ua_str: str) -> bool:
"""Shows the bookmarks timeline """Shows the bookmarks timeline
""" """
if '/users/' in path: if '/users/' in path:
@ -13199,7 +13204,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.cw_lists, self.server.cw_lists,
self.server.lists_enabled, self.server.lists_enabled,
timezone, bold_reading, timezone, bold_reading,
self.server.dogwhistles) self.server.dogwhistles, ua_str)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
@ -13250,7 +13255,7 @@ class PubServer(BaseHTTPRequestHandler):
getreq_start_time, getreq_start_time,
proxy_type: str, cookie: str, proxy_type: str, cookie: str,
debug: str, debug: str,
curr_session) -> bool: curr_session, ua_str: str) -> bool:
"""Shows the outbox timeline """Shows the outbox timeline
""" """
# get outbox feed for a person # get outbox feed for a person
@ -13350,7 +13355,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.cw_lists, self.server.cw_lists,
self.server.lists_enabled, self.server.lists_enabled,
timezone, bold_reading, timezone, bold_reading,
self.server.dogwhistles) self.server.dogwhistles, ua_str)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
@ -13390,7 +13395,7 @@ class PubServer(BaseHTTPRequestHandler):
getreq_start_time, getreq_start_time,
proxy_type: str, cookie: str, proxy_type: str, cookie: str,
debug: str, debug: str,
curr_session) -> bool: curr_session, ua_str: str) -> bool:
"""Shows the moderation timeline """Shows the moderation timeline
""" """
if '/users/' in path: if '/users/' in path:
@ -13498,7 +13503,8 @@ class PubServer(BaseHTTPRequestHandler):
self.server.cw_lists, self.server.cw_lists,
self.server.lists_enabled, self.server.lists_enabled,
timezone, bold_reading, timezone, bold_reading,
self.server.dogwhistles) self.server.dogwhistles,
ua_str)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
@ -18091,7 +18097,8 @@ class PubServer(BaseHTTPRequestHandler):
self.server.allow_deletion, self.server.allow_deletion,
self.server.project_version, self.server.project_version,
self.server.yt_replace_domain, self.server.yt_replace_domain,
self.server.twitter_replacement_domain): self.server.twitter_replacement_domain,
ua_str):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -18114,7 +18121,7 @@ class PubServer(BaseHTTPRequestHandler):
getreq_start_time, getreq_start_time,
proxy_type, proxy_type,
cookie, self.server.debug, cookie, self.server.debug,
curr_session): curr_session, ua_str):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -18137,7 +18144,7 @@ class PubServer(BaseHTTPRequestHandler):
getreq_start_time, getreq_start_time,
proxy_type, proxy_type,
cookie, self.server.debug, cookie, self.server.debug,
curr_session): curr_session, ua_str):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -18160,7 +18167,7 @@ class PubServer(BaseHTTPRequestHandler):
getreq_start_time, getreq_start_time,
proxy_type, proxy_type,
cookie, self.server.debug, cookie, self.server.debug,
curr_session): curr_session, ua_str):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -18183,7 +18190,7 @@ class PubServer(BaseHTTPRequestHandler):
getreq_start_time, getreq_start_time,
proxy_type, proxy_type,
cookie, self.server.debug, cookie, self.server.debug,
curr_session): curr_session, ua_str):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -18206,7 +18213,7 @@ class PubServer(BaseHTTPRequestHandler):
getreq_start_time, getreq_start_time,
proxy_type, proxy_type,
cookie, self.server.debug, cookie, self.server.debug,
curr_session): curr_session, ua_str):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -18226,7 +18233,7 @@ class PubServer(BaseHTTPRequestHandler):
getreq_start_time, getreq_start_time,
proxy_type, proxy_type,
cookie, self.server.debug, cookie, self.server.debug,
curr_session): curr_session, ua_str):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -18248,7 +18255,7 @@ class PubServer(BaseHTTPRequestHandler):
getreq_start_time, getreq_start_time,
proxy_type, proxy_type,
cookie, self.server.debug, cookie, self.server.debug,
curr_session): curr_session, ua_str):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -18266,7 +18273,7 @@ class PubServer(BaseHTTPRequestHandler):
getreq_start_time, getreq_start_time,
proxy_type, proxy_type,
cookie, self.server.debug, cookie, self.server.debug,
curr_session): curr_session, ua_str):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -18368,7 +18375,7 @@ class PubServer(BaseHTTPRequestHandler):
getreq_start_time, getreq_start_time,
proxy_type, proxy_type,
cookie, self.server.debug, cookie, self.server.debug,
curr_session): curr_session, ua_str):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -18392,7 +18399,7 @@ class PubServer(BaseHTTPRequestHandler):
getreq_start_time, getreq_start_time,
proxy_type, proxy_type,
cookie, self.server.debug, cookie, self.server.debug,
curr_session): curr_session, ua_str):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -18416,7 +18423,7 @@ class PubServer(BaseHTTPRequestHandler):
getreq_start_time, getreq_start_time,
proxy_type, proxy_type,
cookie, self.server.debug, cookie, self.server.debug,
curr_session): curr_session, ua_str):
self.server.getreq_busy = False self.server.getreq_busy = False
return return

View File

@ -47,86 +47,23 @@ def header_buttons_timeline(default_timeline: str,
calendar_image: str, calendar_image: str,
follow_approvals: str, follow_approvals: str,
icons_as_buttons: bool, icons_as_buttons: bool,
access_keys: {}) -> str: access_keys: {},
is_text_browser: str) -> str:
"""Returns the header at the top of the timeline, containing """Returns the header at the top of the timeline, containing
buttons for inbox, outbox, search, calendar, etc buttons for inbox, outbox, search, calendar, etc
""" """
# start of the button header with inbox, outbox, etc # start of the button header with inbox, outbox, etc
tl_str = '<div id="containerHeader" class="containerHeader"><nav>\n' tl_str = '<div id="containerHeader" class="containerHeader"><nav>\n'
# first button
if default_timeline == 'tlmedia':
tl_str += \
'<a href="' + users_path + '/tlmedia" tabindex="2" ' + \
'accesskey="' + access_keys['menuMedia'] + '"'
if box_name == 'tlmedia':
tl_str += ' aria-current="location"'
tl_str += \
'><button class="' + \
media_button + '"><span>' + translate['Media'] + \
'</span></button></a>'
elif default_timeline == 'tlblogs':
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>' + 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'] + \
'</span></button></a>'
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>'
# if this is a news instance and we are viewing the news timeline # if this is a news instance and we are viewing the news timeline
features_header = False features_header = False
if default_timeline == 'tlfeatures' and box_name == 'tlfeatures': if default_timeline == 'tlfeatures' and box_name == 'tlfeatures':
features_header = True features_header = True
if not features_header: if not is_text_browser:
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 = \ # first button
acct_dir(base_dir, nickname, domain) + '/tlreplies.index' if default_timeline == 'tlmedia':
if os.path.isfile(replies_index_filename):
tl_str += \
'<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 += \ tl_str += \
'<a href="' + users_path + '/tlmedia" tabindex="2" ' + \ '<a href="' + users_path + '/tlmedia" tabindex="2" ' + \
'accesskey="' + access_keys['menuMedia'] + '"' 'accesskey="' + access_keys['menuMedia'] + '"'
@ -136,34 +73,72 @@ def header_buttons_timeline(default_timeline: str,
'><button class="' + \ '><button class="' + \
media_button + '"><span>' + translate['Media'] + \ media_button + '"><span>' + translate['Media'] + \
'</span></button></a>' '</span></button></a>'
else: elif default_timeline == 'tlblogs':
if not minimal:
tl_str += \ tl_str += \
'<a href="' + users_path + \ '<a href="' + users_path + \
'/inbox" tabindex="2"' '/tlblogs" tabindex="2"'
if box_name == 'inbox': if box_name == 'tlblogs':
tl_str += ' aria-current="location"' tl_str += ' aria-current="location"'
tl_str += \ tl_str += \
'><button class="' + \ '><button class="' + \
inbox_button + '"><span>' + translate['Inbox'] + \ 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'] + \
'</span></button></a>'
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>'
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>' '</span></button></a>'
if not features_header: replies_index_filename = \
# typically the blogs button acct_dir(base_dir, nickname, domain) + '/tlreplies.index'
# but may change if this is a blogging oriented instance if os.path.isfile(replies_index_filename):
if default_timeline != 'tlblogs':
if not minimal:
title_str = translate['Blogs']
if default_timeline == 'tlfeatures':
title_str = translate['Article']
tl_str += \ tl_str += \
'<a href="' + users_path + \ '<a href="' + users_path + '/tlreplies" tabindex="2"'
'/tlblogs" tabindex="2"' if box_name == 'tlreplies':
if box_name == 'tlblogs':
tl_str += ' aria-current="location"' tl_str += ' aria-current="location"'
tl_str += \ tl_str += \
'><button class="' + blogs_button + '" accesskey="' + \ '><button class="' + replies_button + '" ' + \
access_keys['menuBlogs'] + '"><span>' + title_str + \ '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':
tl_str += ' aria-current="location"'
tl_str += \
'><button class="' + \
media_button + '"><span>' + translate['Media'] + \
'</span></button></a>' '</span></button></a>'
else: else:
if not minimal: if not minimal:
@ -177,20 +152,49 @@ def header_buttons_timeline(default_timeline: str,
inbox_button + '"><span>' + translate['Inbox'] + \ inbox_button + '"><span>' + translate['Inbox'] + \
'</span></button></a>' '</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: if not features_header:
tl_str += \ # typically the blogs button
'<a href="' + users_path + \ # but may change if this is a blogging oriented instance
'/inbox" tabindex="2"' if default_timeline != 'tlblogs':
if box_name == 'inbox': if not minimal:
tl_str += ' aria-current="location"' title_str = translate['Blogs']
tl_str += \ if default_timeline == 'tlfeatures':
'><button class="' + \ title_str = translate['Article']
inbox_button + '" accesskey="' + \ tl_str += \
access_keys['menuInbox'] + '"><span>' + translate['Inbox'] + \ '<a href="' + users_path + \
'</span></button></a>' '/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>'
# show todays events buttons on the first inbox page # show todays events buttons on the first inbox page
happening_str = '' happening_str = ''
@ -245,45 +249,49 @@ def header_buttons_timeline(default_timeline: str,
'<button class="button">' + \ '<button class="button">' + \
translate['Happening This Week'] + '</button></a>' translate['Happening This Week'] + '</button></a>'
if not features_header: if not is_text_browser:
# button for the outbox if not features_header:
tl_str += \ # button for the outbox
'<a href="' + users_path + '/outbox"'
if box_name == 'outbox':
tl_str += ' aria-current="location"'
tl_str += \
'><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 + \
moderation_button_str + happening_str + new_post_button_str
if not features_header:
if not icons_as_buttons:
# the search icon
tl_str += \ tl_str += \
'<a class="imageAnchor" href="' + users_path + \ '<a href="' + users_path + '/outbox"'
'/search" accesskey="' + access_keys['menuSearch'] + \ if box_name == 'outbox':
'" tabindex="3">' + \ tl_str += ' aria-current="location"'
'<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 += \ tl_str += \
'<a href="' + users_path + \ '><button class="' + \
'/search" tabindex="3">' + \ sent_button + '" tabindex="2" accesskey="' + \
'<button class="button" ' + \ access_keys['menuOutbox'] + '">' + \
'accesskey="' + access_keys['menuSearch'] + '>' + \ '<span>' + translate['Sent'] + '</span></button></a>'
'<span>' + translate['Search'] + \
'</span></button></a>' # add other buttons
tl_str += \
shares_button_str + wanted_button_str + \
bookmarks_button_str + events_button_str + \
moderation_button_str + happening_str + new_post_button_str
else:
tl_str += happening_str
if not is_text_browser:
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>'
# benchmark 5 # benchmark 5
time_diff = int((time.time() - timeline_start_time) * 1000) time_diff = int((time.time() - timeline_start_time) * 1000)
@ -291,45 +299,47 @@ def header_buttons_timeline(default_timeline: str,
print('TIMELINE TIMING ' + box_name + ' 5 = ' + str(time_diff)) print('TIMELINE TIMING ' + box_name + ' 5 = ' + str(time_diff))
# the calendar button # the calendar button
if not features_header: if not is_text_browser:
calendar_alt_text = translate['Calendar'] if not features_header:
if new_calendar_event: calendar_alt_text = translate['Calendar']
# indicate that the calendar icon is highlighted if new_calendar_event:
calendar_alt_text = '*' + calendar_alt_text + '*' # indicate that the calendar icon is highlighted
if not icons_as_buttons: calendar_alt_text = '*' + calendar_alt_text + '*'
tl_str += \ if not icons_as_buttons:
' <a class="imageAnchor" href="' + \ tl_str += \
users_path + calendar_path + \ ' <a class="imageAnchor" href="' + \
'" accesskey="' + access_keys['menuCalendar'] + \ users_path + calendar_path + \
'" tabindex="3">' + \ '" accesskey="' + access_keys['menuCalendar'] + \
'<img loading="lazy" decoding="async" src="/icons/' + \ '" tabindex="3">' + \
calendar_image + '" title="' + translate['Calendar'] + \ '<img loading="lazy" decoding="async" src="/icons/' + \
'" alt="| ' + calendar_alt_text + \ calendar_image + '" title="' + translate['Calendar'] + \
'" class="timelineicon"/></a>\n' '" alt="| ' + calendar_alt_text + \
else: '" class="timelineicon"/></a>\n'
tl_str += \ else:
'<a href="' + users_path + calendar_path + \ tl_str += \
'" tabindex="3"><button class="button" accesskey="' + \ '<a href="' + users_path + calendar_path + \
access_keys['menuCalendar'] + '">' + \ '" tabindex="3"><button class="button" accesskey="' + \
'<span>' + translate['Calendar'] + \ access_keys['menuCalendar'] + '">' + \
'</span></button></a>' '<span>' + translate['Calendar'] + \
'</span></button></a>'
if not features_header: if not features_header:
# the show/hide button, for a simpler header appearance # the show/hide button, for a simpler header appearance
if not icons_as_buttons: if not icons_as_buttons:
tl_str += \ tl_str += \
' <a class="imageAnchor" href="' + \ ' <a class="imageAnchor" href="' + \
users_path + '/minimal" tabindex="3">' + \ users_path + '/minimal" tabindex="3">' + \
'<img loading="lazy" decoding="async" src="/icons' + \ '<img loading="lazy" decoding="async" src="/icons' + \
'/showhide.png" title="' + translate['Show/Hide Buttons'] + \ '/showhide.png" title="' + \
'" alt="| ' + translate['Show/Hide Buttons'] + \ translate['Show/Hide Buttons'] + \
'" class="timelineicon"/></a>\n' '" alt="| ' + translate['Show/Hide Buttons'] + \
else: '" class="timelineicon"/></a>\n'
tl_str += \ else:
'<a href="' + users_path + '/minimal' + \ tl_str += \
'" tabindex="3"><button class="button">' + \ '<a href="' + users_path + '/minimal' + \
'<span>' + translate['Show/Hide Buttons'] + \ '" tabindex="3"><button class="button">' + \
'</span></button></a>' '<span>' + translate['Show/Hide Buttons'] + \
'</span></button></a>'
if features_header: if features_header:
tl_str += \ tl_str += \
@ -340,41 +350,42 @@ def header_buttons_timeline(default_timeline: str,
'><button class="button">' + \ '><button class="button">' + \
'<span>' + translate['User'] + '</span></button></a>' '<span>' + translate['User'] + '</span></button></a>'
# the newswire button to show right column links if not is_text_browser:
if not icons_as_buttons: # the newswire button to show right column links
tl_str += \ if not icons_as_buttons:
'<a class="imageAnchorMobile" href="' + \ tl_str += \
users_path + '/newswiremobile">' + \ '<a class="imageAnchorMobile" href="' + \
'<img loading="lazy" decoding="async" src="/icons' + \ users_path + '/newswiremobile">' + \
'/newswire.png" title="' + translate['News'] + \ '<img loading="lazy" decoding="async" src="/icons' + \
'" alt="| ' + translate['News'] + \ '/newswire.png" title="' + translate['News'] + \
'" class="timelineicon"/></a>' '" alt="| ' + translate['News'] + \
else: '" class="timelineicon"/></a>'
# NOTE: deliberately no \n at end of line else:
tl_str += \ # NOTE: deliberately no \n at end of line
'<a href="' + \ tl_str += \
users_path + '/newswiremobile' + \ '<a href="' + \
'" tabindex="2"><button class="buttonMobile">' + \ users_path + '/newswiremobile' + \
'<span>' + translate['Newswire'] + \ '" tabindex="2"><button class="buttonMobile">' + \
'</span></button></a>' '<span>' + translate['Newswire'] + \
'</span></button></a>'
# the links button to show left column links # the links button to show left column links
if not icons_as_buttons: if not icons_as_buttons:
tl_str += \ tl_str += \
'<a class="imageAnchorMobile" href="' + \ '<a class="imageAnchorMobile" href="' + \
users_path + '/linksmobile">' + \ users_path + '/linksmobile">' + \
'<img loading="lazy" decoding="async" src="/icons' + \ '<img loading="lazy" decoding="async" src="/icons' + \
'/links.png" title="' + translate['Edit Links'] + \ '/links.png" title="' + translate['Edit Links'] + \
'" alt="| ' + translate['Edit Links'] + \ '" alt="| ' + translate['Edit Links'] + \
'" class="timelineicon"/></a>' '" class="timelineicon"/></a>'
else: else:
# NOTE: deliberately no \n at end of line # NOTE: deliberately no \n at end of line
tl_str += \ tl_str += \
'<a href="' + \ '<a href="' + \
users_path + '/linksmobile' + \ users_path + '/linksmobile' + \
'" tabindex="2"><button class="buttonMobile">' + \ '" tabindex="2"><button class="buttonMobile">' + \
'<span>' + translate['Links'] + \ '<span>' + translate['Links'] + \
'</span></button></a>' '</span></button></a>'
if features_header: if features_header:
tl_str += \ tl_str += \

View File

@ -58,7 +58,7 @@ def html_moderation(default_timeline: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
cw_lists: {}, lists_enabled: str, cw_lists: {}, lists_enabled: str,
timezone: str, bold_reading: bool, timezone: str, bold_reading: bool,
dogwhistles: {}) -> str: dogwhistles: {}, ua_str: str) -> str:
"""Show the moderation feed as html """Show the moderation feed as html
This is what you see when selecting the "mod" timeline This is what you see when selecting the "mod" timeline
""" """
@ -84,7 +84,7 @@ def html_moderation(default_timeline: str,
text_mode_banner, access_keys, system_language, text_mode_banner, access_keys, system_language,
max_like_count, shared_items_federated_domains, max_like_count, shared_items_federated_domains,
signing_priv_key_pem, cw_lists, lists_enabled, signing_priv_key_pem, cw_lists, lists_enabled,
timezone, bold_reading, dogwhistles) timezone, bold_reading, dogwhistles, ua_str)
def html_account_info(translate: {}, def html_account_info(translate: {},

View File

@ -382,6 +382,16 @@ def _html_timeline_keyboard(moderator: bool, text_mode_banner: str,
follow_approvals) follow_approvals)
def text_mode_browser(ua_str: str) -> bool:
"""Does the user agent indicate a text mode browser?
"""
text_mode_agents = ('Lynx/', 'w3m/', 'Links (', 'Emacs/', 'ELinks')
for agent in text_mode_agents:
if agent in ua_str:
return True
return False
def _html_timeline_end(base_dir: str, nickname: str, domain_full: str, def _html_timeline_end(base_dir: str, nickname: str, domain_full: str,
http_prefix: str, translate: {}, http_prefix: str, translate: {},
moderator: bool, editor: bool, moderator: bool, editor: bool,
@ -391,7 +401,8 @@ def _html_timeline_end(base_dir: str, nickname: str, domain_full: str,
authorized: bool, theme: str, authorized: bool, theme: str,
default_timeline: str, access_keys: {}, default_timeline: str, access_keys: {},
box_name: str, box_name: str,
enable_timing_log: bool, timeline_start_time) -> str: enable_timing_log: bool, timeline_start_time,
ua_str: str) -> str:
"""Ending of the timeline, containing the right column """Ending of the timeline, containing the right column
""" """
# end of timeline-posts # end of timeline-posts
@ -401,17 +412,19 @@ def _html_timeline_end(base_dir: str, nickname: str, domain_full: str,
tl_str += ' </td>\n' tl_str += ' </td>\n'
# right column # right column
right_column_str = \ right_column_str = ''
get_right_column_content(base_dir, nickname, domain_full, if not text_mode_browser(ua_str):
http_prefix, translate, right_column_str = \
moderator, editor, get_right_column_content(base_dir, nickname, domain_full,
newswire, positive_voting, http_prefix, translate,
False, None, True, moderator, editor,
show_publish_as_icon, newswire, positive_voting,
rss_icon_at_top, False, None, True,
publish_button_at_top, show_publish_as_icon,
authorized, True, theme, rss_icon_at_top,
default_timeline, access_keys) publish_button_at_top,
authorized, True, theme,
default_timeline, access_keys)
tl_str += ' <td valign="top" class="col-right" ' + \ tl_str += ' <td valign="top" class="col-right" ' + \
'id="newswire" tabindex="-1">\n' + \ 'id="newswire" tabindex="-1">\n' + \
' <aside>\n' + \ ' <aside>\n' + \
@ -494,7 +507,7 @@ def html_timeline(default_timeline: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
cw_lists: {}, lists_enabled: str, cw_lists: {}, lists_enabled: str,
timezone: str, bold_reading: bool, timezone: str, bold_reading: bool,
dogwhistles: {}) -> str: dogwhistles: {}, ua_str: str) -> str:
"""Show the timeline as html """Show the timeline as html
""" """
enable_timing_log = False enable_timing_log = False
@ -780,6 +793,7 @@ def html_timeline(default_timeline: str,
'</header>\n' '</header>\n'
if full_width_tl_button_header: if full_width_tl_button_header:
is_text_browser = text_mode_browser(ua_str)
tl_str += \ tl_str += \
header_buttons_timeline(default_timeline, box_name, page_number, header_buttons_timeline(default_timeline, box_name, page_number,
translate, users_path, media_button, translate, users_path, media_button,
@ -794,7 +808,8 @@ def html_timeline(default_timeline: str,
domain, timeline_start_time, domain, timeline_start_time,
new_calendar_event, calendar_path, new_calendar_event, calendar_path,
calendar_image, follow_approvals, calendar_image, follow_approvals,
icons_as_buttons, access_keys) icons_as_buttons, access_keys,
is_text_browser)
# start the timeline # start the timeline
tl_str += \ tl_str += \
@ -811,12 +826,15 @@ def html_timeline(default_timeline: str,
domain_full = get_full_domain(domain, port) domain_full = get_full_domain(domain, port)
# left column # left column
left_column_str = \ left_column_str = ''
get_left_column_content(base_dir, nickname, domain_full, if not text_mode_browser(ua_str):
http_prefix, translate, left_column_str = \
editor, artist, False, None, rss_icon_at_top, get_left_column_content(base_dir, nickname, domain_full,
True, False, theme, access_keys, http_prefix, translate,
shared_items_federated_domains) editor, artist, False, None,
rss_icon_at_top,
True, False, theme, access_keys,
shared_items_federated_domains)
tl_str += ' <td valign="top" class="col-left" ' + \ tl_str += ' <td valign="top" class="col-left" ' + \
'id="links" tabindex="-1">\n' + \ 'id="links" tabindex="-1">\n' + \
' <aside>\n' + \ ' <aside>\n' + \
@ -828,6 +846,7 @@ def html_timeline(default_timeline: str,
tl_str += ' <td valign="top" class="col-center" tabindex="-1">\n' tl_str += ' <td valign="top" class="col-center" tabindex="-1">\n'
if not full_width_tl_button_header: if not full_width_tl_button_header:
is_text_browser = text_mode_browser(ua_str)
tl_str += \ tl_str += \
header_buttons_timeline(default_timeline, box_name, page_number, header_buttons_timeline(default_timeline, box_name, page_number,
translate, users_path, media_button, translate, users_path, media_button,
@ -842,7 +861,8 @@ def html_timeline(default_timeline: str,
domain, timeline_start_time, domain, timeline_start_time,
new_calendar_event, calendar_path, new_calendar_event, calendar_path,
calendar_image, follow_approvals, calendar_image, follow_approvals,
icons_as_buttons, access_keys) icons_as_buttons, access_keys,
is_text_browser)
tl_str += \ tl_str += \
' <div id="timelineposts" class="timeline-posts" ' + \ ' <div id="timelineposts" class="timeline-posts" ' + \
@ -872,7 +892,8 @@ def html_timeline(default_timeline: str,
authorized, theme, authorized, theme,
default_timeline, access_keys, default_timeline, access_keys,
box_name, box_name,
enable_timing_log, timeline_start_time) + enable_timing_log, timeline_start_time,
ua_str) +
html_footer()) html_footer())
elif box_name == 'tlwanted': elif box_name == 'tlwanted':
max_shares_per_account = items_per_page max_shares_per_account = items_per_page
@ -891,7 +912,8 @@ def html_timeline(default_timeline: str,
authorized, theme, authorized, theme,
default_timeline, access_keys, default_timeline, access_keys,
box_name, box_name,
enable_timing_log, timeline_start_time) + enable_timing_log, timeline_start_time,
ua_str) +
html_footer()) html_footer())
_log_timeline_timing(enable_timing_log, timeline_start_time, box_name, '7') _log_timeline_timing(enable_timing_log, timeline_start_time, box_name, '7')
@ -1051,7 +1073,7 @@ def html_timeline(default_timeline: str,
authorized, theme, authorized, theme,
default_timeline, access_keys, default_timeline, access_keys,
box_name, box_name,
enable_timing_log, timeline_start_time) enable_timing_log, timeline_start_time, ua_str)
tl_str += html_footer() tl_str += html_footer()
return tl_str return tl_str
@ -1244,7 +1266,7 @@ def html_shares(default_timeline: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
cw_lists: {}, lists_enabled: str, cw_lists: {}, lists_enabled: str,
timezone: str, bold_reading: bool, timezone: str, bold_reading: bool,
dogwhistles: {}) -> str: dogwhistles: {}, ua_str: str) -> str:
"""Show the shares timeline as html """Show the shares timeline as html
""" """
manually_approve_followers = \ manually_approve_followers = \
@ -1275,7 +1297,7 @@ def html_shares(default_timeline: str,
shared_items_federated_domains, shared_items_federated_domains,
signing_priv_key_pem, signing_priv_key_pem,
cw_lists, lists_enabled, timezone, cw_lists, lists_enabled, timezone,
bold_reading, dogwhistles) bold_reading, dogwhistles, ua_str)
def html_wanted(default_timeline: str, def html_wanted(default_timeline: str,
@ -1305,7 +1327,7 @@ def html_wanted(default_timeline: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
cw_lists: {}, lists_enabled: str, cw_lists: {}, lists_enabled: str,
timezone: str, bold_reading: bool, timezone: str, bold_reading: bool,
dogwhistles: {}) -> str: dogwhistles: {}, ua_str: str) -> str:
"""Show the wanted timeline as html """Show the wanted timeline as html
""" """
manually_approve_followers = \ manually_approve_followers = \
@ -1336,7 +1358,7 @@ def html_wanted(default_timeline: str,
shared_items_federated_domains, shared_items_federated_domains,
signing_priv_key_pem, signing_priv_key_pem,
cw_lists, lists_enabled, timezone, cw_lists, lists_enabled, timezone,
bold_reading, dogwhistles) bold_reading, dogwhistles, ua_str)
def html_inbox(default_timeline: str, def html_inbox(default_timeline: str,
@ -1367,7 +1389,7 @@ def html_inbox(default_timeline: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
cw_lists: {}, lists_enabled: str, cw_lists: {}, lists_enabled: str,
timezone: str, bold_reading: bool, timezone: str, bold_reading: bool,
dogwhistles: {}) -> str: dogwhistles: {}, ua_str: str) -> str:
"""Show the inbox as html """Show the inbox as html
""" """
manually_approve_followers = \ manually_approve_followers = \
@ -1398,7 +1420,7 @@ def html_inbox(default_timeline: str,
shared_items_federated_domains, shared_items_federated_domains,
signing_priv_key_pem, signing_priv_key_pem,
cw_lists, lists_enabled, timezone, cw_lists, lists_enabled, timezone,
bold_reading, dogwhistles) bold_reading, dogwhistles, ua_str)
def html_bookmarks(default_timeline: str, def html_bookmarks(default_timeline: str,
@ -1429,7 +1451,7 @@ def html_bookmarks(default_timeline: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
cw_lists: {}, lists_enabled: str, cw_lists: {}, lists_enabled: str,
timezone: str, bold_reading: bool, timezone: str, bold_reading: bool,
dogwhistles: {}) -> str: dogwhistles: {}, ua_str: str) -> str:
"""Show the bookmarks as html """Show the bookmarks as html
""" """
manually_approve_followers = \ manually_approve_followers = \
@ -1459,7 +1481,7 @@ def html_bookmarks(default_timeline: str,
access_keys, system_language, max_like_count, access_keys, system_language, max_like_count,
shared_items_federated_domains, signing_priv_key_pem, shared_items_federated_domains, signing_priv_key_pem,
cw_lists, lists_enabled, timezone, cw_lists, lists_enabled, timezone,
bold_reading, dogwhistles) bold_reading, dogwhistles, ua_str)
def html_inbox_dms(default_timeline: str, def html_inbox_dms(default_timeline: str,
@ -1490,7 +1512,7 @@ def html_inbox_dms(default_timeline: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
cw_lists: {}, lists_enabled: str, cw_lists: {}, lists_enabled: str,
timezone: str, bold_reading: bool, timezone: str, bold_reading: bool,
dogwhistles: {}) -> str: dogwhistles: {}, ua_str: str) -> str:
"""Show the DM timeline as html """Show the DM timeline as html
""" """
artist = is_artist(base_dir, nickname) artist = is_artist(base_dir, nickname)
@ -1516,7 +1538,7 @@ def html_inbox_dms(default_timeline: str,
shared_items_federated_domains, shared_items_federated_domains,
signing_priv_key_pem, signing_priv_key_pem,
cw_lists, lists_enabled, timezone, cw_lists, lists_enabled, timezone,
bold_reading, dogwhistles) bold_reading, dogwhistles, ua_str)
def html_inbox_replies(default_timeline: str, def html_inbox_replies(default_timeline: str,
@ -1547,7 +1569,7 @@ def html_inbox_replies(default_timeline: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
cw_lists: {}, lists_enabled: str, cw_lists: {}, lists_enabled: str,
timezone: str, bold_reading: bool, timezone: str, bold_reading: bool,
dogwhistles: {}) -> str: dogwhistles: {}, ua_str: str) -> str:
"""Show the replies timeline as html """Show the replies timeline as html
""" """
artist = is_artist(base_dir, nickname) artist = is_artist(base_dir, nickname)
@ -1572,7 +1594,7 @@ def html_inbox_replies(default_timeline: str,
access_keys, system_language, max_like_count, access_keys, system_language, max_like_count,
shared_items_federated_domains, signing_priv_key_pem, shared_items_federated_domains, signing_priv_key_pem,
cw_lists, lists_enabled, timezone, bold_reading, cw_lists, lists_enabled, timezone, bold_reading,
dogwhistles) dogwhistles, ua_str)
def html_inbox_media(default_timeline: str, def html_inbox_media(default_timeline: str,
@ -1603,7 +1625,7 @@ def html_inbox_media(default_timeline: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
cw_lists: {}, lists_enabled: str, cw_lists: {}, lists_enabled: str,
timezone: str, bold_reading: bool, timezone: str, bold_reading: bool,
dogwhistles: {}) -> str: dogwhistles: {}, ua_str: str) -> str:
"""Show the media timeline as html """Show the media timeline as html
""" """
artist = is_artist(base_dir, nickname) artist = is_artist(base_dir, nickname)
@ -1628,7 +1650,7 @@ def html_inbox_media(default_timeline: str,
access_keys, system_language, max_like_count, access_keys, system_language, max_like_count,
shared_items_federated_domains, signing_priv_key_pem, shared_items_federated_domains, signing_priv_key_pem,
cw_lists, lists_enabled, timezone, bold_reading, cw_lists, lists_enabled, timezone, bold_reading,
dogwhistles) dogwhistles, ua_str)
def html_inbox_blogs(default_timeline: str, def html_inbox_blogs(default_timeline: str,
@ -1659,7 +1681,7 @@ def html_inbox_blogs(default_timeline: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
cw_lists: {}, lists_enabled: str, cw_lists: {}, lists_enabled: str,
timezone: str, bold_reading: bool, timezone: str, bold_reading: bool,
dogwhistles: {}) -> str: dogwhistles: {}, ua_str: str) -> str:
"""Show the blogs timeline as html """Show the blogs timeline as html
""" """
artist = is_artist(base_dir, nickname) artist = is_artist(base_dir, nickname)
@ -1684,7 +1706,7 @@ def html_inbox_blogs(default_timeline: str,
access_keys, system_language, max_like_count, access_keys, system_language, max_like_count,
shared_items_federated_domains, signing_priv_key_pem, shared_items_federated_domains, signing_priv_key_pem,
cw_lists, lists_enabled, timezone, bold_reading, cw_lists, lists_enabled, timezone, bold_reading,
dogwhistles) dogwhistles, ua_str)
def html_inbox_features(default_timeline: str, def html_inbox_features(default_timeline: str,
@ -1716,7 +1738,7 @@ def html_inbox_features(default_timeline: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
cw_lists: {}, lists_enabled: str, cw_lists: {}, lists_enabled: str,
timezone: str, bold_reading: bool, timezone: str, bold_reading: bool,
dogwhistles: {}) -> str: dogwhistles: {}, ua_str: str) -> str:
"""Show the features timeline as html """Show the features timeline as html
""" """
return html_timeline(default_timeline, return html_timeline(default_timeline,
@ -1740,7 +1762,7 @@ def html_inbox_features(default_timeline: str,
access_keys, system_language, max_like_count, access_keys, system_language, max_like_count,
shared_items_federated_domains, signing_priv_key_pem, shared_items_federated_domains, signing_priv_key_pem,
cw_lists, lists_enabled, timezone, bold_reading, cw_lists, lists_enabled, timezone, bold_reading,
dogwhistles) dogwhistles, ua_str)
def html_inbox_news(default_timeline: str, def html_inbox_news(default_timeline: str,
@ -1771,7 +1793,7 @@ def html_inbox_news(default_timeline: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
cw_lists: {}, lists_enabled: str, cw_lists: {}, lists_enabled: str,
timezone: str, bold_reading: bool, timezone: str, bold_reading: bool,
dogwhistles: {}) -> str: dogwhistles: {}, ua_str: str) -> str:
"""Show the news timeline as html """Show the news timeline as html
""" """
return html_timeline(default_timeline, return html_timeline(default_timeline,
@ -1795,7 +1817,7 @@ def html_inbox_news(default_timeline: str,
access_keys, system_language, max_like_count, access_keys, system_language, max_like_count,
shared_items_federated_domains, signing_priv_key_pem, shared_items_federated_domains, signing_priv_key_pem,
cw_lists, lists_enabled, timezone, bold_reading, cw_lists, lists_enabled, timezone, bold_reading,
dogwhistles) dogwhistles, ua_str)
def html_outbox(default_timeline: str, def html_outbox(default_timeline: str,
@ -1826,7 +1848,7 @@ def html_outbox(default_timeline: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
cw_lists: {}, lists_enabled: str, cw_lists: {}, lists_enabled: str,
timezone: str, bold_reading: bool, timezone: str, bold_reading: bool,
dogwhistles: {}) -> str: dogwhistles: {}, ua_str: str) -> str:
"""Show the Outbox as html """Show the Outbox as html
""" """
manually_approve_followers = \ manually_approve_followers = \
@ -1853,4 +1875,4 @@ def html_outbox(default_timeline: str,
access_keys, system_language, max_like_count, access_keys, system_language, max_like_count,
shared_items_federated_domains, signing_priv_key_pem, shared_items_federated_domains, signing_priv_key_pem,
cw_lists, lists_enabled, timezone, bold_reading, cw_lists, lists_enabled, timezone, bold_reading,
dogwhistles) dogwhistles, ua_str)