| \n' + \ ' \n' + \ '\n' # center column containing posts tl_str += ' | \n'
    if not full_width_tl_button_header:
        tl_str += \
            header_buttons_timeline(default_timeline, box_name, page_number,
                                    translate, users_path, media_button,
                                    blogs_button, features_button,
                                    inbox_button,
                                    dm_button, new_dm, replies_button,
                                    new_reply, minimal, sent_button,
                                    shares_button_str, wanted_button_str,
                                    bookmarks_button_str,
                                    events_button_str, moderation_button_str,
                                    header_icons_str,
                                    new_post_button_str, base_dir, nickname,
                                    domain, timeline_start_time,
                                    new_calendar_event, calendar_path,
                                    calendar_image, follow_approvals,
                                    icons_as_buttons, access_keys,
                                    is_text_browser, show_announces)
    tl_str += \
        ' \n'
    # second row of buttons for moderator actions
    tl_str += \
        _html_timeline_moderation_buttons(moderator, box_name, nickname,
                                          moderation_action_str, translate)
    _log_timeline_timing(enable_timing_log, timeline_start_time, box_name, '6')
    if box_name == 'tlshares':
        max_shares_per_account = items_per_page
        tl_str += \
            _html_shares_timeline(translate, page_number, items_per_page,
                                  base_dir, actor, nickname, domain, port,
                                  max_shares_per_account, http_prefix,
                                  shared_items_federated_domains,
                                  'shares')
        # if using a text mode browser then don't show SHOW MORE because there
        # is no way to hide/expand sections.
        # Also replace MITM text with an eye icon
        if is_text_browser:
            tl_str = text_mode_removals(tl_str, translate)
        tl_str += \
            _html_timeline_end(base_dir, nickname, domain_full,
                               translate,
                               moderator, editor,
                               newswire, positive_voting,
                               show_publish_as_icon,
                               rss_icon_at_top, publish_button_at_top,
                               authorized, theme,
                               default_timeline, access_keys,
                               box_name,
                               enable_timing_log, timeline_start_time,
                               ua_str) + html_footer()
        return tl_str
    elif box_name == 'tlwanted':
        max_shares_per_account = items_per_page
        tl_str += \
            _html_shares_timeline(translate, page_number, items_per_page,
                                  base_dir, actor, nickname, domain, port,
                                  max_shares_per_account, http_prefix,
                                  shared_items_federated_domains,
                                  'wanted')
        # if using a text mode browser then don't show SHOW MORE because there
        # is no way to hide/expand sections.
        # Also replace MITM text with an eye icon
        if is_text_browser:
            tl_str = text_mode_removals(tl_str, translate)
        tl_str += \
            _html_timeline_end(base_dir, nickname, domain_full,
                               translate,
                               moderator, editor,
                               newswire, positive_voting,
                               show_publish_as_icon,
                               rss_icon_at_top, publish_button_at_top,
                               authorized, theme,
                               default_timeline, access_keys,
                               box_name,
                               enable_timing_log, timeline_start_time,
                               ua_str) + html_footer()
        return tl_str
    _log_timeline_timing(enable_timing_log, timeline_start_time, box_name, '7')
    # separator between posts which only appears in shell browsers
    # such as Lynx and is not read by screen readers
    if box_name != 'tlmedia':
        text_mode_separator = \
            ' ' + \ page_number_buttons(users_path, box_name, page_number, 'timelineposts') first_post_str = '' if page_number > 2: if last_post_id: first_post_str = ';firstpost=' + last_post_id tl_str += \ ' ![' + \
            translate['Page up'] + ' ' + \
            translate['Page up'] + '](/' + \
            'icons/pageup.png) \n' + \
            ' ' tl_str += ' \n'
        minimize_all_images = False
        if nickname in min_images_for_accounts:
            minimize_all_images = True
        no_seen_posts_filename = account_dir + '/.noSeenPosts'
        no_seen_posts = False
        if os.path.isfile(no_seen_posts_filename):
            no_seen_posts = True
        # show each post in the timeline
        tl_items_str = ''
        for item in timeline_json['orderedItems']:
            if item['type'] in ('Create', 'Announce'):
                # is the actor who sent this post snoozed?
                if is_person_snoozed(base_dir, nickname, domain,
                                     item['actor']):
                    continue
                if is_announce(item):
                    if not show_announces:
                        continue
                    if is_self_announce(item):
                        continue
                    if no_seen_posts:
                        if announce_seen(base_dir, nickname, domain, item):
                            continue
                        mark_announce_as_seen(base_dir, nickname, domain, item)
                # is this a poll/vote/question?
                if not show_vote_posts:
                    if is_question(item):
                        continue
                # is the post in the memory cache of recent ones?
                curr_tl_str = None
                if box_name != 'tlmedia' and recent_posts_cache.get('html'):
                    post_id = remove_id_ending(item['id']).replace('/', '#')
                    if recent_posts_cache['html'].get(post_id):
                        if not first_post_id:
                            first_post_id = post_id
                        last_post_id = post_id
                        curr_tl_str = recent_posts_cache['html'][post_id]
                        curr_tl_str = \
                            prepare_post_from_html_cache(nickname,
                                                         curr_tl_str,
                                                         box_name,
                                                         page_number,
                                                         first_post_id,
                                                         ua_str,
                                                         translate)
                        _log_timeline_timing(enable_timing_log,
                                             timeline_start_time,
                                             box_name, '10')
                if not curr_tl_str:
                    _log_timeline_timing(enable_timing_log,
                                         timeline_start_time,
                                         box_name, '11')
                    mitm = False
                    if item.get('mitm'):
                        mitm = True
                    # read the post from disk
                    curr_tl_str = \
                        individual_post_as_html(signing_priv_key_pem,
                                                False, recent_posts_cache,
                                                max_recent_posts,
                                                translate, page_number,
                                                base_dir, session,
                                                cached_webfingers,
                                                person_cache,
                                                nickname, domain, port,
                                                item, None, True,
                                                allow_deletion,
                                                http_prefix, project_version,
                                                box_name,
                                                yt_replace_domain,
                                                twitter_replacement_domain,
                                                show_published_date_only,
                                                peertube_instances,
                                                allow_local_network_access,
                                                theme, system_language,
                                                max_like_count,
                                                box_name != 'dm',
                                                show_individual_post_icons,
                                                manually_approve_followers,
                                                False, True, use_cache_only,
                                                cw_lists, lists_enabled,
                                                timezone, mitm,
                                                bold_reading, dogwhistles,
                                                minimize_all_images,
                                                first_post_id, buy_sites,
                                                auto_cw_cache,
                                                mitm_servers)
                    _log_timeline_timing(enable_timing_log,
                                         timeline_start_time, box_name, '12')
                if curr_tl_str:
                    if curr_tl_str not in tl_items_str:
                        # is this a poll/vote/question?
                        if not show_vote_posts:
                            if is_html_question(curr_tl_str):
                                continue
                        last_item_str = text_mode_separator + curr_tl_str
                        last_post_id = \
                            remove_id_ending(item['id']).replace('/', '#')
                        if not first_post_id:
                            first_post_id = last_post_id
                        item_ctr += 1
                        if not reverse_sequence:
                            tl_items_str += last_item_str
                            if separator_str:
                                tl_items_str += separator_str
                        else:
                            tl_items_str = last_item_str + tl_items_str
                            if separator_str:
                                tl_items_str = \
                                    last_item_str + \
                                    separator_str + tl_items_str
        tl_str += tl_items_str
        if box_name == 'tlmedia':
            tl_str += '\n'
    if item_ctr < 3:
        print('Items added to html timeline ' + box_name + ': ' +
              str(item_ctr) + ' ' + str(timeline_json['orderedItems']))
    # page down arrow
    if item_ctr > 0:
        # if showing the page down icon then remove the last item so that
        # firstpost does not overlap on the next timeline
        if last_item_str and first_post_id != last_post_id:
            if item_ctr > items_per_page / 2:
                tl_str = tl_str.replace(last_item_str, '')
        tl_str += text_mode_separator
        first_post = ''
        if last_post_id:
            first_post = ';firstpost=' + last_post_id.replace('#', '--')
        last_post = ''
        if first_post_id:
            last_post = ';lastpost=' + first_post_id.replace('#', '--')
        tl_str += \
            ' \n' + \ ' ![' + \
            translate['Page down'] + ' ' + \
            translate['Page down'] + '](/' + \
            'icons/pagedown.png) \n' + \
            ' ' tl_str += text_mode_separator elif item_ctr == 0: tl_str += _get_help_for_timeline(base_dir, box_name) # if using a text mode browser then don't show SHOW MORE because there # is no way to hide/expand sections. # Also replace MITM text with an eye icon if is_text_browser: tl_str = text_mode_removals(tl_str, translate) tl_str += \ _html_timeline_end(base_dir, nickname, domain_full, translate, moderator, editor, newswire, positive_voting, show_publish_as_icon, rss_icon_at_top, publish_button_at_top, authorized, theme, default_timeline, access_keys, box_name, enable_timing_log, timeline_start_time, ua_str) tl_str += html_footer() return tl_str def html_individual_share(domain: str, share_id: str, actor: str, shared_item: {}, translate: {}, show_contact: bool, remove_button: bool, shares_file_type: str) -> str: """Returns an individual shared item as html """ profile_str = ' \n'
    profile_str += \
        '\n'
    if shared_item.get('imageUrl'):
        profile_str += '\n'
        profile_str += \
            '\n'
    return profile_str
def _html_shares_timeline(translate: {}, page_number: int, items_per_page: int,
                          base_dir: str, actor: str,
                          nickname: str, domain: str, port: int,
                          max_shares_per_account: int, http_prefix: str,
                          shared_items_federated_domains: [],
                          shares_file_type: str) -> str:
    """Show shared items timeline as html
    """
    shares_json, last_page = \
        shares_timeline_json(actor, page_number, items_per_page,
                             base_dir, domain, nickname,
                             max_shares_per_account,
                             shared_items_federated_domains, shares_file_type)
    domain_full = get_full_domain(domain, port)
    actor = local_actor_url(http_prefix, nickname, domain_full)
    admin_nickname = get_config_param(base_dir, 'admin')
    admin_actor = ''
    if admin_nickname:
        admin_actor = \
            local_actor_url(http_prefix, admin_nickname, domain_full)
    timeline_str = ''
    if page_number > 1:
        timeline_str += ' ' + shared_item['summary'] + '\n '
    if shared_item.get('itemQty'):
        if shared_item['itemQty'] > 1:
            profile_str += \
                '' + translate['Quantity'] + ': ' + \
                str(shared_item['itemQty']) + ' ' + \ '' + \ '\n' profile_str += \ '\n' if remove_button and domain in share_id: if shares_file_type == 'shares': profile_str += \ ' \n' else: profile_str += \ ' \n' profile_str += ' ' + \ page_number_buttons(actor, 'tl' + shares_file_type, page_number, 'timelineposts') timeline_str += \ ' ![' + translate['Page up'] + \
            ' ' + translate['Page up'] + '](/' + \
            'icons/pageup.png) \n' + \
            ' ![' + translate['Page down'] + \
            ' ' + translate['Page down'] + '](/' + \
            'icons/pagedown.png) \n' + \
            ' ' return timeline_str def html_shares(default_timeline: str, recent_posts_cache: {}, max_recent_posts: int, translate: {}, page_number: int, items_per_page: int, session, base_dir: str, cached_webfingers: {}, person_cache: {}, nickname: str, domain: str, port: int, allow_deletion: bool, http_prefix: str, project_version: str, yt_replace_domain: str, twitter_replacement_domain: str, show_published_date_only: bool, newswire: {}, positive_voting: bool, show_publish_as_icon: bool, full_width_tl_button_header: bool, icons_as_buttons: bool, rss_icon_at_top: bool, publish_button_at_top: bool, authorized: bool, theme: str, peertube_instances: [], allow_local_network_access: bool, text_mode_banner: str, access_keys: {}, system_language: str, max_like_count: int, shared_items_federated_domains: [], signing_priv_key_pem: str, cw_lists: {}, lists_enabled: str, timezone: str, bold_reading: bool, dogwhistles: {}, ua_str: str, min_images_for_accounts: [], reverse_sequence: bool, buy_sites: {}, auto_cw_cache: {}, known_epicyon_instances: [], mitm_servers: []) -> str: """Show the shares timeline as html """ manually_approve_followers = \ follower_approval_active(base_dir, nickname, domain) artist = is_artist(base_dir, nickname) show_announces = True return html_timeline(default_timeline, recent_posts_cache, max_recent_posts, translate, page_number, items_per_page, session, base_dir, cached_webfingers, person_cache, nickname, domain, port, None, 'tlshares', allow_deletion, http_prefix, project_version, manually_approve_followers, False, yt_replace_domain, twitter_replacement_domain, show_published_date_only, newswire, False, False, artist, positive_voting, show_publish_as_icon, full_width_tl_button_header, icons_as_buttons, rss_icon_at_top, publish_button_at_top, authorized, None, theme, peertube_instances, allow_local_network_access, text_mode_banner, access_keys, system_language, max_like_count, shared_items_federated_domains, signing_priv_key_pem, cw_lists, lists_enabled, timezone, bold_reading, dogwhistles, ua_str, min_images_for_accounts, reverse_sequence, None, buy_sites, auto_cw_cache, show_announces, known_epicyon_instances, mitm_servers) def html_wanted(default_timeline: str, recent_posts_cache: {}, max_recent_posts: int, translate: {}, page_number: int, items_per_page: int, session, base_dir: str, cached_webfingers: {}, person_cache: {}, nickname: str, domain: str, port: int, allow_deletion: bool, http_prefix: str, project_version: str, yt_replace_domain: str, twitter_replacement_domain: str, show_published_date_only: bool, newswire: {}, positive_voting: bool, show_publish_as_icon: bool, full_width_tl_button_header: bool, icons_as_buttons: bool, rss_icon_at_top: bool, publish_button_at_top: bool, authorized: bool, theme: str, peertube_instances: [], allow_local_network_access: bool, text_mode_banner: str, access_keys: {}, system_language: str, max_like_count: int, shared_items_federated_domains: [], signing_priv_key_pem: str, cw_lists: {}, lists_enabled: str, timezone: str, bold_reading: bool, dogwhistles: {}, ua_str: str, min_images_for_accounts: [], reverse_sequence: bool, buy_sites: {}, auto_cw_cache: {}, known_epicyon_instances: [], mitm_servers: []) -> str: """Show the wanted timeline as html """ manually_approve_followers = \ follower_approval_active(base_dir, nickname, domain) artist = is_artist(base_dir, nickname) show_announces = True return html_timeline(default_timeline, recent_posts_cache, max_recent_posts, translate, page_number, items_per_page, session, base_dir, cached_webfingers, person_cache, nickname, domain, port, None, 'tlwanted', allow_deletion, http_prefix, project_version, manually_approve_followers, False, yt_replace_domain, twitter_replacement_domain, show_published_date_only, newswire, False, False, artist, positive_voting, show_publish_as_icon, full_width_tl_button_header, icons_as_buttons, rss_icon_at_top, publish_button_at_top, authorized, None, theme, peertube_instances, allow_local_network_access, text_mode_banner, access_keys, system_language, max_like_count, shared_items_federated_domains, signing_priv_key_pem, cw_lists, lists_enabled, timezone, bold_reading, dogwhistles, ua_str, min_images_for_accounts, reverse_sequence, None, buy_sites, auto_cw_cache, show_announces, known_epicyon_instances, mitm_servers) def html_inbox(default_timeline: str, recent_posts_cache: {}, max_recent_posts: int, translate: {}, page_number: int, items_per_page: int, session, base_dir: str, cached_webfingers: {}, person_cache: {}, nickname: str, domain: str, port: int, inbox_json: {}, allow_deletion: bool, http_prefix: str, project_version: str, minimal: bool, yt_replace_domain: str, twitter_replacement_domain: str, show_published_date_only: bool, newswire: {}, positive_voting: bool, show_publish_as_icon: bool, full_width_tl_button_header: bool, icons_as_buttons: bool, rss_icon_at_top: bool, publish_button_at_top: bool, authorized: bool, theme: str, peertube_instances: [], allow_local_network_access: bool, text_mode_banner: str, access_keys: {}, system_language: str, max_like_count: int, shared_items_federated_domains: [], signing_priv_key_pem: str, cw_lists: {}, lists_enabled: str, timezone: str, bold_reading: bool, dogwhistles: {}, ua_str: str, min_images_for_accounts: [], reverse_sequence: bool, last_post_id: str, buy_sites: {}, auto_cw_cache: {}, show_announces: bool, known_epicyon_instances: [], mitm_servers: []) -> str: """Show the inbox as html """ manually_approve_followers = \ follower_approval_active(base_dir, nickname, domain) artist = is_artist(base_dir, nickname) return html_timeline(default_timeline, recent_posts_cache, max_recent_posts, translate, page_number, items_per_page, session, base_dir, cached_webfingers, person_cache, nickname, domain, port, inbox_json, 'inbox', allow_deletion, http_prefix, project_version, manually_approve_followers, minimal, yt_replace_domain, twitter_replacement_domain, show_published_date_only, newswire, False, False, artist, positive_voting, show_publish_as_icon, full_width_tl_button_header, icons_as_buttons, rss_icon_at_top, publish_button_at_top, authorized, None, theme, peertube_instances, allow_local_network_access, text_mode_banner, access_keys, system_language, max_like_count, shared_items_federated_domains, signing_priv_key_pem, cw_lists, lists_enabled, timezone, bold_reading, dogwhistles, ua_str, min_images_for_accounts, reverse_sequence, last_post_id, buy_sites, auto_cw_cache, show_announces, known_epicyon_instances, mitm_servers) def html_bookmarks(default_timeline: str, recent_posts_cache: {}, max_recent_posts: int, translate: {}, page_number: int, items_per_page: int, session, base_dir: str, cached_webfingers: {}, person_cache: {}, nickname: str, domain: str, port: int, bookmarks_json: {}, allow_deletion: bool, http_prefix: str, project_version: str, minimal: bool, yt_replace_domain: str, twitter_replacement_domain: str, show_published_date_only: bool, newswire: {}, positive_voting: bool, show_publish_as_icon: bool, full_width_tl_button_header: bool, icons_as_buttons: bool, rss_icon_at_top: bool, publish_button_at_top: bool, authorized: bool, theme: str, peertube_instances: [], allow_local_network_access: bool, text_mode_banner: str, access_keys: {}, system_language: str, max_like_count: int, shared_items_federated_domains: [], signing_priv_key_pem: str, cw_lists: {}, lists_enabled: str, timezone: str, bold_reading: bool, dogwhistles: {}, ua_str: str, min_images_for_accounts: [], reverse_sequence: bool, buy_sites: {}, auto_cw_cache: {}, known_epicyon_instances: [], mitm_servers: []) -> str: """Show the bookmarks as html """ manually_approve_followers = \ follower_approval_active(base_dir, nickname, domain) artist = is_artist(base_dir, nickname) show_announces = True return html_timeline(default_timeline, recent_posts_cache, max_recent_posts, translate, page_number, items_per_page, session, base_dir, cached_webfingers, person_cache, nickname, domain, port, bookmarks_json, 'tlbookmarks', allow_deletion, http_prefix, project_version, manually_approve_followers, minimal, yt_replace_domain, twitter_replacement_domain, show_published_date_only, newswire, False, False, artist, positive_voting, show_publish_as_icon, full_width_tl_button_header, icons_as_buttons, rss_icon_at_top, publish_button_at_top, authorized, None, theme, peertube_instances, allow_local_network_access, text_mode_banner, access_keys, system_language, max_like_count, shared_items_federated_domains, signing_priv_key_pem, cw_lists, lists_enabled, timezone, bold_reading, dogwhistles, ua_str, min_images_for_accounts, reverse_sequence, None, buy_sites, auto_cw_cache, show_announces, known_epicyon_instances, mitm_servers) def html_inbox_dms(default_timeline: str, recent_posts_cache: {}, max_recent_posts: int, translate: {}, page_number: int, items_per_page: int, session, base_dir: str, cached_webfingers: {}, person_cache: {}, nickname: str, domain: str, port: int, inbox_json: {}, allow_deletion: bool, http_prefix: str, project_version: str, minimal: bool, yt_replace_domain: str, twitter_replacement_domain: str, show_published_date_only: bool, newswire: {}, positive_voting: bool, show_publish_as_icon: bool, full_width_tl_button_header: bool, icons_as_buttons: bool, rss_icon_at_top: bool, publish_button_at_top: bool, authorized: bool, theme: str, peertube_instances: [], allow_local_network_access: bool, text_mode_banner: str, access_keys: {}, system_language: str, max_like_count: int, shared_items_federated_domains: [], signing_priv_key_pem: str, cw_lists: {}, lists_enabled: str, timezone: str, bold_reading: bool, dogwhistles: {}, ua_str: str, min_images_for_accounts: [], reverse_sequence: bool, last_post_id: str, buy_sites: {}, auto_cw_cache: {}, known_epicyon_instances: [], mitm_servers: []) -> str: """Show the DM timeline as html """ artist = is_artist(base_dir, nickname) show_announces = False return html_timeline(default_timeline, recent_posts_cache, max_recent_posts, translate, page_number, items_per_page, session, base_dir, cached_webfingers, person_cache, nickname, domain, port, inbox_json, 'dm', allow_deletion, http_prefix, project_version, False, minimal, yt_replace_domain, twitter_replacement_domain, show_published_date_only, newswire, False, False, artist, positive_voting, show_publish_as_icon, full_width_tl_button_header, icons_as_buttons, rss_icon_at_top, publish_button_at_top, authorized, None, theme, peertube_instances, allow_local_network_access, text_mode_banner, access_keys, system_language, max_like_count, shared_items_federated_domains, signing_priv_key_pem, cw_lists, lists_enabled, timezone, bold_reading, dogwhistles, ua_str, min_images_for_accounts, reverse_sequence, last_post_id, buy_sites, auto_cw_cache, show_announces, known_epicyon_instances, mitm_servers) def html_inbox_replies(default_timeline: str, recent_posts_cache: {}, max_recent_posts: int, translate: {}, page_number: int, items_per_page: int, session, base_dir: str, cached_webfingers: {}, person_cache: {}, nickname: str, domain: str, port: int, inbox_json: {}, allow_deletion: bool, http_prefix: str, project_version: str, minimal: bool, yt_replace_domain: str, twitter_replacement_domain: str, show_published_date_only: bool, newswire: {}, positive_voting: bool, show_publish_as_icon: bool, full_width_tl_button_header: bool, icons_as_buttons: bool, rss_icon_at_top: bool, publish_button_at_top: bool, authorized: bool, theme: str, peertube_instances: [], allow_local_network_access: bool, text_mode_banner: str, access_keys: {}, system_language: str, max_like_count: int, shared_items_federated_domains: [], signing_priv_key_pem: str, cw_lists: {}, lists_enabled: str, timezone: str, bold_reading: bool, dogwhistles: {}, ua_str: str, min_images_for_accounts: [], reverse_sequence: bool, last_post_id: str, buy_sites: {}, auto_cw_cache: {}, known_epicyon_instances: [], mitm_servers: []) -> str: """Show the replies timeline as html """ artist = is_artist(base_dir, nickname) show_announces = True return html_timeline(default_timeline, recent_posts_cache, max_recent_posts, translate, page_number, items_per_page, session, base_dir, cached_webfingers, person_cache, nickname, domain, port, inbox_json, 'tlreplies', allow_deletion, http_prefix, project_version, False, minimal, yt_replace_domain, twitter_replacement_domain, show_published_date_only, newswire, False, False, artist, positive_voting, show_publish_as_icon, full_width_tl_button_header, icons_as_buttons, rss_icon_at_top, publish_button_at_top, authorized, None, theme, peertube_instances, allow_local_network_access, text_mode_banner, access_keys, system_language, max_like_count, shared_items_federated_domains, signing_priv_key_pem, cw_lists, lists_enabled, timezone, bold_reading, dogwhistles, ua_str, min_images_for_accounts, reverse_sequence, last_post_id, buy_sites, auto_cw_cache, show_announces, known_epicyon_instances, mitm_servers) def html_inbox_media(default_timeline: str, recent_posts_cache: {}, max_recent_posts: int, translate: {}, page_number: int, items_per_page: int, session, base_dir: str, cached_webfingers: {}, person_cache: {}, nickname: str, domain: str, port: int, inbox_json: {}, allow_deletion: bool, http_prefix: str, project_version: str, minimal: bool, yt_replace_domain: str, twitter_replacement_domain: str, show_published_date_only: bool, newswire: {}, positive_voting: bool, show_publish_as_icon: bool, full_width_tl_button_header: bool, icons_as_buttons: bool, rss_icon_at_top: bool, publish_button_at_top: bool, authorized: bool, theme: str, peertube_instances: [], allow_local_network_access: bool, text_mode_banner: str, access_keys: {}, system_language: str, max_like_count: int, shared_items_federated_domains: [], signing_priv_key_pem: str, cw_lists: {}, lists_enabled: str, timezone: str, bold_reading: bool, dogwhistles: {}, ua_str: str, min_images_for_accounts: [], reverse_sequence: bool, last_post_id: str, buy_sites: {}, auto_cw_cache: {}, show_announces: bool, known_epicyon_instances: [], mitm_servers: []) -> str: """Show the media timeline as html """ artist = is_artist(base_dir, nickname) return html_timeline(default_timeline, recent_posts_cache, max_recent_posts, translate, page_number, items_per_page, session, base_dir, cached_webfingers, person_cache, nickname, domain, port, inbox_json, 'tlmedia', allow_deletion, http_prefix, project_version, False, minimal, yt_replace_domain, twitter_replacement_domain, show_published_date_only, newswire, False, False, artist, positive_voting, show_publish_as_icon, full_width_tl_button_header, icons_as_buttons, rss_icon_at_top, publish_button_at_top, authorized, None, theme, peertube_instances, allow_local_network_access, text_mode_banner, access_keys, system_language, max_like_count, shared_items_federated_domains, signing_priv_key_pem, cw_lists, lists_enabled, timezone, bold_reading, dogwhistles, ua_str, min_images_for_accounts, reverse_sequence, last_post_id, buy_sites, auto_cw_cache, show_announces, known_epicyon_instances, mitm_servers) def html_inbox_blogs(default_timeline: str, recent_posts_cache: {}, max_recent_posts: int, translate: {}, page_number: int, items_per_page: int, session, base_dir: str, cached_webfingers: {}, person_cache: {}, nickname: str, domain: str, port: int, inbox_json: {}, allow_deletion: bool, http_prefix: str, project_version: str, minimal: bool, yt_replace_domain: str, twitter_replacement_domain: str, show_published_date_only: bool, newswire: {}, positive_voting: bool, show_publish_as_icon: bool, full_width_tl_button_header: bool, icons_as_buttons: bool, rss_icon_at_top: bool, publish_button_at_top: bool, authorized: bool, theme: str, peertube_instances: [], allow_local_network_access: bool, text_mode_banner: str, access_keys: {}, system_language: str, max_like_count: int, shared_items_federated_domains: [], signing_priv_key_pem: str, cw_lists: {}, lists_enabled: str, timezone: str, bold_reading: bool, dogwhistles: {}, ua_str: str, min_images_for_accounts: [], reverse_sequence: bool, last_post_id: str, buy_sites: {}, auto_cw_cache: {}, known_epicyon_instances: [], mitm_servers: []) -> str: """Show the blogs timeline as html """ artist = is_artist(base_dir, nickname) show_announces = True return html_timeline(default_timeline, recent_posts_cache, max_recent_posts, translate, page_number, items_per_page, session, base_dir, cached_webfingers, person_cache, nickname, domain, port, inbox_json, 'tlblogs', allow_deletion, http_prefix, project_version, False, minimal, yt_replace_domain, twitter_replacement_domain, show_published_date_only, newswire, False, False, artist, positive_voting, show_publish_as_icon, full_width_tl_button_header, icons_as_buttons, rss_icon_at_top, publish_button_at_top, authorized, None, theme, peertube_instances, allow_local_network_access, text_mode_banner, access_keys, system_language, max_like_count, shared_items_federated_domains, signing_priv_key_pem, cw_lists, lists_enabled, timezone, bold_reading, dogwhistles, ua_str, min_images_for_accounts, reverse_sequence, last_post_id, buy_sites, auto_cw_cache, show_announces, known_epicyon_instances, mitm_servers) def html_inbox_features(default_timeline: str, recent_posts_cache: {}, max_recent_posts: int, translate: {}, page_number: int, items_per_page: int, session, base_dir: str, cached_webfingers: {}, person_cache: {}, nickname: str, domain: str, port: int, inbox_json: {}, allow_deletion: bool, http_prefix: str, project_version: str, minimal: bool, yt_replace_domain: str, twitter_replacement_domain: str, show_published_date_only: bool, newswire: {}, positive_voting: bool, show_publish_as_icon: bool, full_width_tl_button_header: bool, icons_as_buttons: bool, rss_icon_at_top: bool, publish_button_at_top: bool, authorized: bool, theme: str, peertube_instances: [], allow_local_network_access: bool, text_mode_banner: str, access_keys: {}, system_language: str, max_like_count: int, shared_items_federated_domains: [], signing_priv_key_pem: str, cw_lists: {}, lists_enabled: str, timezone: str, bold_reading: bool, dogwhistles: {}, ua_str: str, min_images_for_accounts: [], reverse_sequence: bool, buy_sites: {}, auto_cw_cache: {}, known_epicyon_instances: [], mitm_servers: []) -> str: """Show the features timeline as html """ show_announces = True return html_timeline(default_timeline, recent_posts_cache, max_recent_posts, translate, page_number, items_per_page, session, base_dir, cached_webfingers, person_cache, nickname, domain, port, inbox_json, 'tlfeatures', allow_deletion, http_prefix, project_version, False, minimal, yt_replace_domain, twitter_replacement_domain, show_published_date_only, newswire, False, False, False, positive_voting, show_publish_as_icon, full_width_tl_button_header, icons_as_buttons, rss_icon_at_top, publish_button_at_top, authorized, None, theme, peertube_instances, allow_local_network_access, text_mode_banner, access_keys, system_language, max_like_count, shared_items_federated_domains, signing_priv_key_pem, cw_lists, lists_enabled, timezone, bold_reading, dogwhistles, ua_str, min_images_for_accounts, reverse_sequence, None, buy_sites, auto_cw_cache, show_announces, known_epicyon_instances, mitm_servers) def html_inbox_news(default_timeline: str, recent_posts_cache: {}, max_recent_posts: int, translate: {}, page_number: int, items_per_page: int, session, base_dir: str, cached_webfingers: {}, person_cache: {}, nickname: str, domain: str, port: int, inbox_json: {}, allow_deletion: bool, http_prefix: str, project_version: str, minimal: bool, yt_replace_domain: str, twitter_replacement_domain: str, show_published_date_only: bool, newswire: {}, moderator: bool, editor: bool, artist: bool, positive_voting: bool, show_publish_as_icon: bool, full_width_tl_button_header: bool, icons_as_buttons: bool, rss_icon_at_top: bool, publish_button_at_top: bool, authorized: bool, theme: str, peertube_instances: [], allow_local_network_access: bool, text_mode_banner: str, access_keys: {}, system_language: str, max_like_count: int, shared_items_federated_domains: [], signing_priv_key_pem: str, cw_lists: {}, lists_enabled: str, timezone: str, bold_reading: bool, dogwhistles: {}, ua_str: str, min_images_for_accounts: [], reverse_sequence: bool, buy_sites: {}, auto_cw_cache: {}, known_epicyon_instances: [], mitm_servers: []) -> str: """Show the news timeline as html """ show_announces = True return html_timeline(default_timeline, recent_posts_cache, max_recent_posts, translate, page_number, items_per_page, session, base_dir, cached_webfingers, person_cache, nickname, domain, port, inbox_json, 'tlnews', allow_deletion, http_prefix, project_version, False, minimal, yt_replace_domain, twitter_replacement_domain, show_published_date_only, newswire, moderator, editor, artist, positive_voting, show_publish_as_icon, full_width_tl_button_header, icons_as_buttons, rss_icon_at_top, publish_button_at_top, authorized, None, theme, peertube_instances, allow_local_network_access, text_mode_banner, access_keys, system_language, max_like_count, shared_items_federated_domains, signing_priv_key_pem, cw_lists, lists_enabled, timezone, bold_reading, dogwhistles, ua_str, min_images_for_accounts, reverse_sequence, None, buy_sites, auto_cw_cache, show_announces, known_epicyon_instances, mitm_servers) def html_outbox(default_timeline: str, recent_posts_cache: {}, max_recent_posts: int, translate: {}, page_number: int, items_per_page: int, session, base_dir: str, cached_webfingers: {}, person_cache: {}, nickname: str, domain: str, port: int, outbox_json: {}, allow_deletion: bool, http_prefix: str, project_version: str, minimal: bool, yt_replace_domain: str, twitter_replacement_domain: str, show_published_date_only: bool, newswire: {}, positive_voting: bool, show_publish_as_icon: bool, full_width_tl_button_header: bool, icons_as_buttons: bool, rss_icon_at_top: bool, publish_button_at_top: bool, authorized: bool, theme: str, peertube_instances: [], allow_local_network_access: bool, text_mode_banner: str, access_keys: {}, system_language: str, max_like_count: int, shared_items_federated_domains: [], signing_priv_key_pem: str, cw_lists: {}, lists_enabled: str, timezone: str, bold_reading: bool, dogwhistles: {}, ua_str: str, min_images_for_accounts: [], reverse_sequence: bool, buy_sites: {}, auto_cw_cache: {}, show_announces: bool, known_epicyon_instances: [], mitm_servers: []) -> str: """Show the Outbox as html """ manually_approve_followers = \ follower_approval_active(base_dir, nickname, domain) artist = is_artist(base_dir, nickname) return html_timeline(default_timeline, recent_posts_cache, max_recent_posts, translate, page_number, items_per_page, session, base_dir, cached_webfingers, person_cache, nickname, domain, port, outbox_json, 'outbox', allow_deletion, http_prefix, project_version, manually_approve_followers, minimal, yt_replace_domain, twitter_replacement_domain, show_published_date_only, newswire, False, False, artist, positive_voting, show_publish_as_icon, full_width_tl_button_header, icons_as_buttons, rss_icon_at_top, publish_button_at_top, authorized, None, theme, peertube_instances, allow_local_network_access, text_mode_banner, access_keys, system_language, max_like_count, shared_items_federated_domains, signing_priv_key_pem, cw_lists, lists_enabled, timezone, bold_reading, dogwhistles, ua_str, min_images_for_accounts, reverse_sequence, None, buy_sites, auto_cw_cache, show_announces, known_epicyon_instances, mitm_servers) | 
![' + \
                translate['Create a new DM'] + \
                ' | ' + translate['Create a new DM'] + \
                '](/' + \
                'icons/newpost.png) \n'
        else:
            new_post_button_str += \
                '' + \
                ''
    elif box_name in ('tlblogs', 'tlnews', 'tlfeatures'):
        if not icons_as_buttons:
            new_post_button_str += \
                '' + \
                '
\n'
        else:
            new_post_button_str += \
                '' + \
                ''
    elif box_name in ('tlblogs', 'tlnews', 'tlfeatures'):
        if not icons_as_buttons:
            new_post_button_str += \
                '' + \
                '![' + \
                    translate['Create a new post'] + ' | ' + \
                    translate['Create a new post'] + \
                    '](/' + \
                    'icons/newpost.png) \n'
            else:
                new_post_button_str += \
                    '' + \
                    ''
        else:
            if not icons_as_buttons:
                new_post_button_str += \
                    '' + \
                    '
\n'
            else:
                new_post_button_str += \
                    '' + \
                    ''
        else:
            if not icons_as_buttons:
                new_post_button_str += \
                    '' + \
                    '![' + \
                            translate['Approve follow requests'] + \
                            ' ' + \
                            translate['Approve follow requests'] + \
                            '](/icons/person.png) \n'
                        break
        except OSError:
            print('EX: html_timeline unable to read ' +
                  follow_requests_filename)
    _log_timeline_timing(enable_timing_log, timeline_start_time, box_name, '3')
    # moderation / reports button
    moderation_button_str = ''
    if moderator and not minimal:
        moderation_button_str = \
            ''
    # shares, bookmarks and events buttons
    shares_button_str = ''
    wanted_button_str = ''
    bookmarks_button_str = ''
    events_button_str = ''
    if not minimal:
        shares_button_str = \
            ''
        wanted_button_str = \
            ''
        bookmarks_button_str = \
            ''
    # filename of the banner shown at the top
    banner_file, _ = \
        get_banner_file(base_dir, nickname, domain, theme)
    banner_path = users_path + '/' + banner_file
    # these images are pre-loaded to prevent the web page from
    # jumping around when rendering
    preload_images = [
        banner_path,
        '/icons/showhide.png',
        '/icons/repeat_hide.png',
        '/icons/repeat_show.png',
        '/icons/calendar.png',
        '/icons/search.png',
        '/icons/newpost.png',
        '/icons/mute.png',
        '/icons/unmute.png',
        '/icons/reaction.png',
        '/icons/bookmark_inactive.png',
        '/icons/bookmark.png',
        '/icons/like.png',
        '/icons/like_inactive.png',
        '/icons/repeat_inactive.png',
        '/icons/repeat.png',
        '/icons/reply.png',
        '/icons/theme.png',
        '/icons/logorss.png',
        '/icons/edit.png',
        '/icons/publish.png',
        '/icons/categoriesrss.png'
    ]
    instance_title = \
        get_config_param(base_dir, 'instanceTitle')
    tl_str = \
        html_header_with_external_style(css_filename, instance_title, None,
                                        preload_images)
    _log_timeline_timing(enable_timing_log, timeline_start_time, box_name, '4')
    # if this is a news instance and we are viewing the news timeline
    news_header = False
    if default_timeline == 'tlfeatures' and box_name == 'tlfeatures':
        news_header = True
    header_icons_str = ''
    # start of headericons div
    if not news_header:
        if not icons_as_buttons:
            header_icons_str = '
\n'
                        break
        except OSError:
            print('EX: html_timeline unable to read ' +
                  follow_requests_filename)
    _log_timeline_timing(enable_timing_log, timeline_start_time, box_name, '3')
    # moderation / reports button
    moderation_button_str = ''
    if moderator and not minimal:
        moderation_button_str = \
            ''
    # shares, bookmarks and events buttons
    shares_button_str = ''
    wanted_button_str = ''
    bookmarks_button_str = ''
    events_button_str = ''
    if not minimal:
        shares_button_str = \
            ''
        wanted_button_str = \
            ''
        bookmarks_button_str = \
            ''
    # filename of the banner shown at the top
    banner_file, _ = \
        get_banner_file(base_dir, nickname, domain, theme)
    banner_path = users_path + '/' + banner_file
    # these images are pre-loaded to prevent the web page from
    # jumping around when rendering
    preload_images = [
        banner_path,
        '/icons/showhide.png',
        '/icons/repeat_hide.png',
        '/icons/repeat_show.png',
        '/icons/calendar.png',
        '/icons/search.png',
        '/icons/newpost.png',
        '/icons/mute.png',
        '/icons/unmute.png',
        '/icons/reaction.png',
        '/icons/bookmark_inactive.png',
        '/icons/bookmark.png',
        '/icons/like.png',
        '/icons/like_inactive.png',
        '/icons/repeat_inactive.png',
        '/icons/repeat.png',
        '/icons/reply.png',
        '/icons/theme.png',
        '/icons/logorss.png',
        '/icons/edit.png',
        '/icons/publish.png',
        '/icons/categoriesrss.png'
    ]
    instance_title = \
        get_config_param(base_dir, 'instanceTitle')
    tl_str = \
        html_header_with_external_style(css_filename, instance_title, None,
                                        preload_images)
    _log_timeline_timing(enable_timing_log, timeline_start_time, box_name, '4')
    # if this is a news instance and we are viewing the news timeline
    news_header = False
    if default_timeline == 'tlfeatures' and box_name == 'tlfeatures':
        news_header = True
    header_icons_str = ''
    # start of headericons div
    if not news_header:
        if not icons_as_buttons:
            header_icons_str = '