diff --git a/pinaxcon/templates/symposion/schedule/presentation_detail.html b/pinaxcon/templates/symposion/schedule/presentation_detail.html
index 62c01cc7..a79957ec 100644
--- a/pinaxcon/templates/symposion/schedule/presentation_detail.html
+++ b/pinaxcon/templates/symposion/schedule/presentation_detail.html
@@ -36,11 +36,14 @@
{{ speaker }}
+ {% if speaker.mastodon_username %}
+ {{ speaker.mastodon_username|twitter_handle }}
+ {% endif %}
{% if speaker.twitter_username %}
- {{ speaker.twitter_username|twitter_handle }}
+ {{ speaker.twitter_username|twitter_handle }}
{% endif %}
{% if speaker.homepage %}
- {{ speaker.homepage }}
+ {{ speaker.homepage }}
{% endif %}
{{ speaker.biography | markdownify }}
diff --git a/pinaxcon/templates/symposion/speakers/speaker_profile.html b/pinaxcon/templates/symposion/speakers/speaker_profile.html
index 245e808f..99de0ad1 100644
--- a/pinaxcon/templates/symposion/speakers/speaker_profile.html
+++ b/pinaxcon/templates/symposion/speakers/speaker_profile.html
@@ -9,12 +9,17 @@
{% block head_title %}Speaker - {{ speaker.name }}{% endblock %}
{% block page_title %}Speaker - {{ speaker.name }}{% endblock %}
{% block page_lead %}
+{% if speaker.mastodon_username %}
+ {{ speaker.mastodon_username|twitter_handle }}
+{% endif %}
+{% one_or_more_populated speaker.twitter_username speaker.homepage as has_second %}
+{% if speaker.mastodon_username and has_second %} | {% endif %}
{% if speaker.twitter_username %}
- {{ speaker.twitter_username|twitter_handle }}
+ {{ speaker.twitter_username|twitter_handle }}
{% endif %}
{% if speaker.twitter_username and speaker.homepage %} | {% endif %}
{% if speaker.homepage %}
- {{ speaker.homepage }}
+ {{ speaker.homepage }}
{% endif %}
{% endblock %}
diff --git a/pinaxcon/templatetags/lca2019_tags.py b/pinaxcon/templatetags/lca2019_tags.py
index d971373a..bc89be5a 100644
--- a/pinaxcon/templatetags/lca2019_tags.py
+++ b/pinaxcon/templatetags/lca2019_tags.py
@@ -71,3 +71,23 @@ def clean_text(txt):
def twitter_handle(txt):
# Add @ to twitter handle if not present
return txt if txt.startswith('@') else '@{}'.format(txt)
+
+
+@register.filter
+def mastodon_url(txt):
+ parts = txt.split('@')
+ if len(parts) == 2:
+ # Assume missing the leading @, so: ACCOUNT_NAME@SERVER_NAME
+ account_name, server_name = parts
+ elif len(parts) == 3:
+ # This is the standard format: @ACCOUNT_NAME@SERVER_NAME
+ _, account_name, server_name = parts
+ else:
+ return ''
+
+ return f'https://{server_name}/@{account_name}'
+
+
+@register.simple_tag(takes_context=True)
+def one_or_more_populated(context, *args):
+ return any(args)
\ No newline at end of file