view wikked/views/__init__.py @ 477:71c9259de019

web: Add help pages to wiki.
author Ludovic Chabant <ludovic@chabant.com>
date Thu, 11 Oct 2018 23:24:36 -0700
parents 8ee6e7649aba
children 0b696e838559
line wrap: on
line source

import urllib.parse
from flask import request, url_for
from flask_login import current_user
from wikked.utils import get_url_folder, split_page_url
from wikked.web import get_wiki


def add_auth_data(data):
    username = current_user.get_id()
    if current_user.is_authenticated():
        user_page_url = 'user:/%s' % urllib.parse.quote(username.title())
        data['auth'] = {
                'is_logged_in': True,
                'username': username,
                'url_logout': '/logout',
                'url_profile': '/read/%s' % user_page_url
                }
    else:
        data['auth'] = {
                'is_logged_in': False,
                'url_login': '/login'
                }


def add_navigation_data(
        url, data, *,
        home=True, new_page=True,
        read=False, edit=False, history=False, inlinks=False, upload=False,
        raw_url=None, extras=None, footers=None):
    is_readonly_endpoint = False
    if url is not None:
        url = url.lstrip('/')
        endpoint, _ = split_page_url(url)
        if endpoint:
            epinfo = get_wiki().getEndpoint(endpoint)
            is_readonly_endpoint = (epinfo is not None and epinfo.readonly)
    elif read or edit or history or inlinks:
        raise Exception("Default navigation entries require a valid URL.")

    nav = {'extras': [], 'footers': []}

    nav['hide_menu'] = (
        request.cookies.get('wiki-hide-nav') == '1')

    nav['url_help'] = url_for('read', url='help:/Help Contents')

    if home:
        nav['url_home'] = '/'
    if new_page and not is_readonly_endpoint:
        url_folder = get_url_folder(url).lstrip('/')
        nav['url_new'] = url_for('create_page', url_folder=url_folder)
    if read:
        nav['url_read'] = url_for('read', url=url)
    if edit and not is_readonly_endpoint:
        nav['url_edit'] = url_for('edit_page', url=url)
    if history and not is_readonly_endpoint:
        nav['url_hist'] = url_for('page_history', url=url)

    if inlinks:
        nav['extras'].append({
            'title': "Pages Linking Here",
            'url': url_for('incoming_links', url=url),
            'icon': 'link'
            })

    if upload and not is_readonly_endpoint:
        nav['extras'].append({
            'title': "Upload File",
            'url': url_for('upload_file', p=url),
            'icon': 'upload'
        })

    if raw_url:
        nav['footers'].append({
            'title': "RAW",
            'url': raw_url,
            'icon': 'wrench'
            })

    nav['extras'].append({
            'title': "Special Pages",
            'url': url_for('special_pages_dashboard'),
            'icon': 'tachometer-alt'})

    if extras:
        nav['extras'] = [{'title': e[0], 'url': e[1], 'icon': e[2]}
                         for e in extras]

    if footers:
        nav['footers'] = [{'title': f[0], 'url': f[1], 'icon': f[2]}
                          for f in footers]
    data['nav'] = nav