Пример #1
0
def search_pages_macro(macro, environ, **kwargs):
    """
    A creole macro that lists wiki pages according to various criteria (tags only for now).
    Usage: <<PageList tags=tag1,tag2,tag3>>
    """
    from genshi import Markup
    from ductus.resource.ductmodels import tag_value_attribute_validator
    from ductus.index import search_pages

    tags = kwargs.get("tags", '')

    try:
        parsed_tags = tags.split(',')
        for tag in parsed_tags:
            tag_value_attribute_validator(tag)
    except Exception:
        return Markup('<p>Invalid tag search</p>')

    try:
        pages = search_pages(tags=parsed_tags)
    except Exception:
        return Markup('<p>Search failed</p>')

    html = ['<ul>']
    for page in pages:
        html.append('<li><a href="{0}">{1}</a></li>'.format(page['path'], page['absolute_pagename']))

    html.append('</ul>')
    return Markup('<p class="search_results">' + '\n'.join(html) + '</p>')
Пример #2
0
def html5_pagelist_macro(macro_tag, fullpagesource):
    """ generate the html output for the pagelist macro"""

    from lxml import etree
    from ductus.resource.ductmodels import tag_value_attribute_validator
    from ductus.index import search_pages

    tags = macro_tag.get("data-tags", '')

    try:
        parsed_tags = tags.split(',')
        for tag in parsed_tags:
            tag_value_attribute_validator(tag)
    except Exception:
        rv = etree.fromstring('<p>Invalid tag search</p>')

    try:
        pages = search_pages(tags=parsed_tags)
    except Exception:
        rv = etree.fromstring('<p>Search failed</p>')

    rv = etree.Element('ul')
    rv.set("class", "search_results")
    for page in pages:
        li = etree.SubElement(rv, 'li')
        a = etree.SubElement(li, 'a', href=page['path'])
        a.text = page['absolute_pagename']

    return macro_tag.append(rv)
Пример #3
0
def search_pages_macro(macro, environ, **kwargs):
    """
    A creole macro that lists wiki pages according to various criteria (tags only for now).
    Usage: <<PageList tags=tag1,tag2,tag3>>
    """
    from genshi import Markup
    from ductus.resource.ductmodels import tag_value_attribute_validator
    from ductus.index import search_pages

    tags = kwargs.get("tags", '')

    try:
        parsed_tags = tags.split(',')
        for tag in parsed_tags:
            tag_value_attribute_validator(tag)
    except Exception:
        return Markup('<p>Invalid tag search</p>')

    try:
        pages = search_pages(tags=parsed_tags)
    except Exception:
        return Markup('<p>Search failed</p>')

    html = ['<ul>']
    for page in pages:
        html.append('<li><a href="{0}">{1}</a></li>'.format(
            page['path'], page['absolute_pagename']))

    html.append('</ul>')
    return Markup('<p class="search_results">' + '\n'.join(html) + '</p>')
Пример #4
0
def html5_pagelist_macro(macro_tag, fullpagesource):
    """ generate the html output for the pagelist macro"""

    from lxml import etree
    from ductus.resource.ductmodels import tag_value_attribute_validator
    from ductus.index import search_pages

    tags = macro_tag.get("data-tags", '')

    try:
        parsed_tags = tags.split(',')
        for tag in parsed_tags:
            tag_value_attribute_validator(tag)
    except Exception:
        rv = etree.fromstring('<p>Invalid tag search</p>')

    try:
        pages = search_pages(tags=parsed_tags)
    except Exception:
        rv = etree.fromstring('<p>Search failed</p>')

    rv = etree.Element('ul')
    rv.set("class", "search_results")
    for page in pages:
        li = etree.SubElement(rv, 'li')
        a = etree.SubElement(li, 'a', href=page['path'])
        a.text = page['absolute_pagename']

    return macro_tag.append(rv)
Пример #5
0
def edit_flashcard_deck(request):
    if request.method == 'POST':
        return handle_blueprint_post(request, FlashcardDeck)

    resource_or_template = None
    if hasattr(request, 'ductus') and getattr(request.ductus, 'resource', None):
        resource_or_template = request.ductus.resource
    elif request.GET.get('template') in flashcard_templates:
        resource_or_template = flashcard_templates[request.GET['template']]()
        # add any provided tag(s) to the template object
        for tag in request.GET.getlist('tag'):
            try:
                tag_value_attribute_validator(tag)
            except ValidationError:
                pass  # the given tag is invalid, so ignore it
            else:
                tag_elt = resource_or_template.tags.new_item()
                tag_elt.value = tag
                resource_or_template.tags.array.append(tag_elt)

    return render_to_response('flashcards/edit_flashcard_deck.html', {
        'writable_directories': get_writable_directories_for_user(request.user),
        'resource_or_template': resource_or_template,
        'available_audio_formats': available_audio_formats,
    }, RequestContext(request))
Пример #6
0
def edit_flashcard_deck(request):
    if request.method == 'POST':
        return handle_blueprint_post(request, FlashcardDeck)

    resource_or_template = None
    if hasattr(request, 'ductus') and getattr(request.ductus, 'resource',
                                              None):
        resource_or_template = request.ductus.resource
    elif request.GET.get('template') in flashcard_templates:
        resource_or_template = flashcard_templates[request.GET['template']]()
        # add any provided tag(s) to the template object
        for tag in request.GET.getlist('tag'):
            try:
                tag_value_attribute_validator(tag)
            except ValidationError:
                pass  # the given tag is invalid, so ignore it
            else:
                tag_elt = resource_or_template.tags.new_item()
                tag_elt.value = tag
                resource_or_template.tags.array.append(tag_elt)

    return render_to_response(
        'flashcards/edit_flashcard_deck.html', {
            'writable_directories': get_writable_directories_for_user(
                request.user),
            'resource_or_template': resource_or_template,
            'available_audio_formats': available_audio_formats,
        }, RequestContext(request))