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>')
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)
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>')
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))
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))