Help for web.app.render_navbar

Project

web.app

Function

render_navbar

Sample CLI

gway web.app render-navbar

References

['qr', 'qr.generate_url', 'resource']

Full Code

def render_navbar(visited, path, current_url=None):
    if not cookies_enabled() or len(visited) < 1:
        visited = ["Readme=gway/readme"]

    links = ""
    seen = set()
    for entry in reversed(visited):
        if "=" not in entry:
            continue
        title, route = entry.split("=", 1)
        if title in seen:
            continue
        seen.add(title)
        links += f'<li><a href="/{route}">{title}</a></li>'

    search_box = f'''
        <form action="/{path}/help" method="get" class="navbar">
            <input type="text" name="topic" placeholder="Search GWAY" class="help" />
        </form>
    '''
    qr_html = ""
    if current_url:
        qr_url = gw.qr.generate_url(current_url)
        qr_html = f'''
            <div class="qr">
                <p class="qr">QR Code for this page:</p>
                <img src="{qr_url}" alt="QR Code" class="navbar-qr" />
            </div>
        '''

    styles_dir = gw.resource("data", "static", "styles")
    available_styles = sorted(
        f for f in os.listdir(styles_dir)
        if f.endswith(".css") and os.path.isfile(os.path.join(styles_dir, f))
    )

    current_style = request.get_cookie("css") or "default.css"
    options = "\n".join(
        f'<option value="{s}"{" selected" if s == current_style else ""}>{s[:-4]}</option>'
        for s in available_styles
    )
    style_selector = f'''
        <form method="get" class="style-form">
            <label for="css-style">Style:</label>
            <select id="css-style" name="css" class="style-selector" onchange="this.form.submit()">
                {options}
            </select>
            <noscript><button type="submit">Set</button></noscript>
        </form>
    '''

    return f"<aside>{search_box}<ul>{links}</ul><br>{qr_html}<br>{style_selector}</aside>"