def test_pop_titles_oneline(): """ We should be able to extract the title and summary lines. """ text = trim(""" Title """) blocks = BlockList(text) title, summary = blocks.pop_titles() assert title == "Title" assert summary == "" assert blocks.text() == ""
def user_page(user_slug): """ Show <user_slug>/fixtures/author + user documents. """ header_buttons = [login_or_logout_button()] login = get_login() if login and login['username'] == user_slug: header_buttons += [ new_article_button(user_slug), ] header_buttons += [ edit_button(user_slug, 'fixtures', 'author'), ] if not login: header_buttons += [subscribe_button(), rss_button(user_slug)] footer_buttons = [] if config['ARTICLE_WIKI_CREDIT'] == 'YES': footer_buttons += [source_button()] footer_buttons += [help_button()] if has_authority_for_user(user_slug): footer_buttons += [export_archive_button(user_slug)] slugs = data.userDocumentSet_list(user_slug) changes_list = data.userDocumentLastChanged_list(user_slug) if not has_authority_for_user(user_slug): # Show only those that have been published changes_list, __ = split_published(changes_list) article_slugs = [_ for _ in slugs if _ not in ['fixtures', 'templates']] article_keys = [ data.userDocumentMetadata_key(user_slug, _) for _ in article_slugs ] article_list = sorted(data.get_hashes(article_keys), key=lambda _: _.get('title', '')) published_articles, unpublished_articles = split_published(article_list) if not has_authority_for_user(user_slug): unpublished_articles = [] settings = Settings({ 'config:host': domain_name(bottle.request), 'config:user': user_slug, 'config:document': 'fixtures', }) wiki = Wiki(settings) document = data.userDocument_get(user_slug, 'fixtures') if not document: msg = "User '{:s}' not found." bottle.abort(HTTP_NOT_FOUND, msg.format(user_slug)) if 'author' in document: text = document['author'] else: text = trim(""" Author Page (Author information to be added here...) """) blocks = BlockList(clean_text(text)) page_title, page_summary = blocks.pop_titles() content_html = wiki.process(None, None, {'index': blocks.text()}, fragment=True, preview=True) inline = Inline() return views.get_template('user.html').render( config=config, user=user_slug, page_title="{:s} - {:s}".format(page_title, page_summary), title_html=inline.process(page_title), summary_html=inline.process(page_summary), header_buttons=header_buttons, footer_buttons=footer_buttons, changes_list=changes_list, published_articles=published_articles, unpublished_articles=unpublished_articles, content_html=content_html, pluralize=pluralize # <-- hack function injection )
def make_index(self, text): """ Front matter preceding index text. Multi-author blocks are disabled for now; v.0.1.0 is SINGLE_USER. """ env = Environment(autoescape=True) tpl = env.from_string( trim(""" <header> {% if title_html != "" %} <hgroup> <h1 class="balance-text">{{ title_html|safe }}</h1> {% if summary != "" %} <h2 class="balance-text">{{ summary_html|safe }}</h2> {% endif %} </hgroup> {% endif %} {% if author != "" or email != "" %} <div class="author-list"> <address> {% if author != "" %} <div>{{ author }}</div> {% endif %} {% if email != "" %} <div><a href="mailto:{{ email }}">{{ email }}</a></div> {% endif %} </address> </div> {% endif %} {% if facebook != "" or twitter != "" %} <p class="space space-between"> {% if facebook != "" %} <a href="https://facebook.com/{{ facebook }}" target="_blank"> FB: {{ facebook }} </a> {% endif %} {% if twitter != "" %} <a href="https://twitter.com/{{ twitter }}" target="_blank"> TW: {{ twitter }} </a> {% endif %} </p> {% endif %} {% if date %} <p class="space" rel="date"> {% if parsed_date != None %} <time pubdate datetime="{{ parsed_date }}">{{ date }}</time> {% else %} {{ date }} {% endif %} </p> {% endif %} </header> <section class="depth-0"> {{ content_html|safe }} </section> """)) inline = Inline() content, _ = split_bibliography(text) blocks = BlockList(content) title, summary = blocks.pop_titles() content_html = blocks.html(['0'], 'index', self.settings, fragment=True) date_string = inline.process(self.settings.get('DATE', '')) try: dt = parse(date_string) date_yyyymmdd = dt.date().isoformat() except ValueError: date_yyyymmdd = None # author = self.split_author() return tpl.render( title_html=inline.process(title), summary_html=inline.process(summary), author=self.settings.get('AUTHOR', ''), email=self.settings.get('EMAIL', ''), facebook=self.settings.get('FACEBOOK', ''), twitter=self.settings.get('TWITTER', ''), date=date_string, parsed_date=date_yyyymmdd, edit_link=self.settings.get_base_uri('edit') + '/index', content_html=content_html, )