diff --git a/district/models.py b/district/models.py index 68270abaabb159ddfd320bed2e2c103ea580b91b..e57ea2ae006e40b827f6d70d20ca82a68aa228fa 100644 --- a/district/models.py +++ b/district/models.py @@ -49,6 +49,7 @@ from shared.models import ( ArticleMixin, ExtendedMetadataHomePageMixin, ExtendedMetadataPageMixin, + HomepageMixin, MenuMixin, SubpageMixin, ) @@ -64,7 +65,12 @@ CONTENT_BLOCKS = DEFAULT_CONTENT_BLOCKS + [ class DistrictHomePage( - MenuMixin, ExtendedMetadataHomePageMixin, MetadataPageMixin, CalendarMixin, Page + MenuMixin, + ExtendedMetadataHomePageMixin, + MetadataPageMixin, + CalendarMixin, + HomepageMixin, + Page, ): ### FIELDS @@ -252,6 +258,7 @@ class DistrictHomePage( gettext_lazy("Nastavení lišty s kalendářem a mapou"), ), FieldPanel("fallback_image"), + FieldPanel("mastodon_feed"), ] ### EDIT HANDLERS @@ -376,6 +383,7 @@ class DistrictArticlePage( FieldPanel("is_black"), FieldPanel("tags"), FieldPanel("thumb_image"), + FieldPanel("mastodon_feed"), ] promote_panels = make_promote_panels( @@ -426,6 +434,7 @@ class DistrictArticlesPage( content_panels = Page.content_panels + [ FieldPanel("max_items"), + FieldPanel("mastodon_feed"), ] promote_panels = make_promote_panels() @@ -565,6 +574,7 @@ class DistrictContactPage( content_panels = Page.content_panels + [ FieldPanel("contact_people"), FieldPanel("text"), + FieldPanel("mastodon_feed"), ] promote_panels = make_promote_panels() @@ -698,6 +708,7 @@ class DistrictPersonPage( FieldPanel("flickr_url"), FieldPanel("custom_web_url"), FieldPanel("other_urls"), + FieldPanel("mastodon_feed"), ], "Sociální sítě", ), @@ -772,7 +783,10 @@ class DistrictPeoplePage( ### PANELS - content_panels = Page.content_panels + [FieldPanel("content")] + content_panels = Page.content_panels + [ + FieldPanel("content"), + FieldPanel("mastodon_feed"), + ] promote_panels = make_promote_panels() @@ -806,7 +820,10 @@ class DistrictElectionBasePage( ### PANELS - content_panels = Page.content_panels + [FieldPanel("content")] + content_panels = Page.content_panels + [ + FieldPanel("content"), + FieldPanel("mastodon_feed"), + ] promote_panels = make_promote_panels() @@ -850,6 +867,7 @@ class DistrictPostElectionStrategyPage( content_panels = DistrictElectionBasePage.content_panels + [ FieldPanel("perex"), + FieldPanel("mastodon_feed"), ] ### RELATIONS @@ -892,6 +910,7 @@ class DistrictElectionProgramPage( PageChooserPanel("guarantor"), FieldPanel("image"), FieldPanel("perex"), + FieldPanel("mastodon_feed"), ] ### RELATIONS @@ -1019,6 +1038,7 @@ class DistrictElectionCampaignPage(DistrictElectionBasePage): "Hero banner", ), FieldPanel("order"), + FieldPanel("mastodon_feed"), ] ### RELATIONS @@ -1122,6 +1142,7 @@ class DistrictInteractiveProgramPage( content_panels = Page.content_panels + [ FieldPanel("perex"), FieldPanel("content"), + FieldPanel("mastodon_feed"), ] promote_panels = make_promote_panels() @@ -1171,6 +1192,7 @@ class DistrictProgramPage( content_panels = Page.content_panels + [ FieldPanel("perex"), FieldPanel("content"), + FieldPanel("mastodon_feed"), ] promote_panels = make_promote_panels() @@ -1245,6 +1267,7 @@ class DistrictCenterPage( FieldPanel("content"), FieldPanel("calendar_url"), FieldPanel("sidebar_content"), + FieldPanel("mastodon_feed"), ] promote_panels = make_promote_panels() @@ -1325,6 +1348,7 @@ class DistrictCrossroadPage( content_panels = Page.content_panels + [ FieldPanel("cards_content"), FieldPanel("content"), + FieldPanel("mastodon_feed"), ] promote_panels = make_promote_panels() @@ -1374,6 +1398,7 @@ class DistrictCustomPage( content_panels = Page.content_panels + [ FieldPanel("content"), + FieldPanel("mastodon_feed"), ] promote_panels = make_promote_panels() @@ -1476,6 +1501,7 @@ class DistrictGeoFeatureCollectionPage( FieldPanel("promoted_block_title"), FieldPanel("logo_image"), FieldPanel("image"), + FieldPanel("mastodon_feed"), ], "Obsah hlavní stránky kolekce", ), @@ -1699,6 +1725,7 @@ class DistrictGeoFeatureDetailPage( ), PageChooserPanel("guarantor"), FieldPanel("sort_order"), + FieldPanel("mastodon_feed"), ] settings_panels = [] diff --git a/district/templates/district/base.html b/district/templates/district/base.html index 0f20b30bd7e8579b8006969b559f882b8250e118..2128f77c5dedfe781287a3b785e6d86d1a05e36e 100644 --- a/district/templates/district/base.html +++ b/district/templates/district/base.html @@ -160,7 +160,7 @@ <div class="__js-root"> <ui-app inline-template> - <ui-view-provider :initial="{regions: false, calendar: false}" v-slot="{ isCurrentView, toggleView }"> + <ui-view-provider :initial="{regions: false, calendar: false, mastodon: false}" v-slot="{ isCurrentView, toggleView }"> <nav class="subnav py-2"> <div class="container container--wide"> <div class="flex"> @@ -201,8 +201,20 @@ {% endwith %} {% endif %} + <button + class="btn btn--condensed btn--grey-500 btn--hoveractive btn--to-white text-sm ml-2 px-0" + :class="{'btn--activated': isCurrentView('mastodon')}" + @click="toggleView('mastodon')" + aria-label="Mastodon feed" + > + <div class="btn__body py-2"> + {% include "shared/mastodon_icon_snippet.html" with size="20" class_name="mr-2" %} + <span class="hidden md:block" aria-hidden="true">Mastodon feed</span> + </div> + </button> + {% if page.root_page.facebook %} - <a href="{{ page.root_page.facebook }}" target="_blank" rel="noopener noreferrer" class="btn btn--inline-icon btn--condensed btn--hoveractive btn--grey-500 btn--to-brands-facebook text-sm ml-2 px-0"> + <a href="{{ page.root_page.facebook }}" target="_blank" rel="noopener noreferrer" class="btn btn--inline-icon btn--condensed btn--hoveractive btn--grey-500 btn--to-brands-facebook text-sm ml-2 px-0"> <div class="btn__body py-2"> <i class="btn__inline-icon ico--facebook mr-0 md:mr-2 text-brands-facebook"></i> <span class="hidden md:block">{{ page.root_page }}</span> @@ -223,6 +235,11 @@ {% include "shared/calendar_current_events_snippet.html" %} </div> </div> + <div class="subnav-aside__item" :class="{'subnav-aside__item--visible': isCurrentView('mastodon')}"> + <div class="container container--default flex justify-center"> + {% include "shared/mastodon_feed_snippet.html" %} + </div> + </div> </aside> </ui-view-provider> </ui-app> diff --git a/district/templates/district/district_interactive_program_page.html b/district/templates/district/district_interactive_program_page.html index 065b10f2d1c1536ead789d52b0f604170842a1b9..e298a7b777726cd4513cdf8a2a6cf7dc3a97a1c2 100644 --- a/district/templates/district/district_interactive_program_page.html +++ b/district/templates/district/district_interactive_program_page.html @@ -111,12 +111,7 @@ <button class="mast-share-button">Sdílet</button> </div> <label class="mast-top mast-check-label"> - <img - src="{% static 'district/svg/share-icons/mastodon-brands.svg' %}" - alt="Sdílet na Mastodonu" - height="40" - width="40" - > + {% include "shared/mastodon_icon_snippet.html" with size="40" %} </label> </div> diff --git a/senate/models.py b/senate/models.py index 8b3facef72b25bc08a756080c8ef11f1c9df2aff..b6b95aa998f72a2c1d9ae3a68eea6a36275ac238 100644 --- a/senate/models.py +++ b/senate/models.py @@ -8,6 +8,7 @@ from wagtail.images.edit_handlers import FieldPanel from wagtail.models import Page from wagtailmetadata.models import MetadataPageMixin +from shared.models import HomepageMixin from tuning import admin_help @@ -25,7 +26,7 @@ class PersonBlock(blocks.StructBlock): label = "osoba" -class SenateHomePage(MetadataPageMixin, Page): +class SenateHomePage(MetadataPageMixin, HomepageMixin, Page): ### FIELDS senators = StreamField( @@ -70,7 +71,11 @@ class SenateHomePage(MetadataPageMixin, Page): ), ] - settings_panels = [FieldPanel("matomo_id"), CommentPanel()] + settings_panels = [ + FieldPanel("matomo_id"), + FieldPanel("mastodon_feed"), + CommentPanel(), + ] ### RELATIONS diff --git a/senate/templates/senate/base.html b/senate/templates/senate/base.html index bcbab5841b7526968383e3cdee6b13698747eb1a..b45a7bfe9981b55c9d9fbad8322e78213667dbaa 100644 --- a/senate/templates/senate/base.html +++ b/senate/templates/senate/base.html @@ -62,6 +62,7 @@ <a href="https://www.instagram.com/pirati.cz/"><i class="fab fa-instagram"></i></a> <a href="https://www.youtube.com/user/CeskaPiratskaStrana"><i class="fab fa-youtube"></i></a> <a href="https://www.flickr.com/photos/pirati/"><i class="fab fa-flickr"></i></a> + {% include "shared/mastodon_feed_link_snippet" %} </div> <a href="https://nalodeni.pirati.cz" class="btn-icon c-green my-1"> <div class="btn-wrap"> diff --git a/shared/blocks.py b/shared/blocks.py index 87031401f18e99b5ad16deae83897f70df0c3933..99061111fa87a3e2daca3f7261b0438342fe910d 100644 --- a/shared/blocks.py +++ b/shared/blocks.py @@ -1044,14 +1044,13 @@ class ChartBlock(blocks.StructBlock): Zobrazí se tolik definovaných sloupců, kolik existuje skupin.""" -class MastodonFeedBlock: +class MastodonFeedBlock(blocks.StructBlock): url = blocks.URLBlock( required=True, label="URL pro mastodon feed", default="https://mastodon.pirati.cz", ) - userId = blocks.IntegerBlock(required=False, label="ID uživatele mastodonu") - userName = blocks.CharBlock(required=False, label="Uživatelské jméno pro mastodon") + user_name = blocks.CharBlock(required=True, label="Uživatelské jméno pro mastodon") class Meta: label = "Mastodon feed" diff --git a/shared/models.py b/shared/models.py index 44924a502f840168fc695196c754f8ca8ae4def9..7608e06b760b5503e0fe28daefdd8ca6ec86f209 100644 --- a/shared/models.py +++ b/shared/models.py @@ -6,14 +6,48 @@ from wagtail.admin.panels import FieldPanel, MultiFieldPanel, PublishingPanel from wagtail.fields import StreamField from wagtail.models import Page -from shared.blocks import DEFAULT_CONTENT_BLOCKS, MenuItemBlock, MenuParentBlock +from shared.blocks import ( + DEFAULT_CONTENT_BLOCKS, + MastodonFeedBlock, + MenuItemBlock, + MenuParentBlock, +) logger = logging.getLogger(__name__) -class SubpageMixin: +class HomepageMixin(models.Model): + """ + Use this for homepage types + """ + + mastodon_feed = StreamField( + [ + ("mastodon_feed", MastodonFeedBlock()), + ], + verbose_name="Mastodon feed", + blank=True, + use_json_field=True, + max_length=1, + ) + + class Meta: + abstract = True + + +class SubpageMixin(models.Model): """Must be used in class definition before MetadataPageMixin!""" + mastodon_feed = StreamField( + [ + ("mastodon_feed", MastodonFeedBlock()), + ], + verbose_name="Mastodon feed", + blank=True, + use_json_field=True, + max_length=1, + ) + @property def root_page(self): if not hasattr(self, "_root_page"): @@ -25,6 +59,9 @@ class SubpageMixin: def get_meta_image(self): return self.search_image or self.root_page.get_meta_image() + class Meta: + abstract = True + class ArticleMixin(models.Model): """ diff --git a/shared/static/shared/js/mastodon_helper.js b/shared/static/shared/js/mastodon_helper.js deleted file mode 100644 index 5a5207e1c8580a4dbe8a67f585de9cae2383aa32..0000000000000000000000000000000000000000 --- a/shared/static/shared/js/mastodon_helper.js +++ /dev/null @@ -1,51 +0,0 @@ -window.resources ||= {}; - -/** - * @param {string} url - * @returns {Promise<string>} - */ -const fetchResource = async (url) => { - return await (await window.fetch(url)).text(); -}; - -/** - * @param {string} url - */ -const loadResource = async (url) => { - if (window.resources[url]) { - return window.resources[url]; - } - window.resources[url] = fetchResource(url); - return await window.resources[url]; -}; - -/** - * @param {HTMLElement} parent - * @param {string} content - */ -const applyScript = async (parent, content) => { - const base64 = btoa(content); - if (!document.querySelector(`script[data-content='${base64}']`)) { - const scriptTag = document.createElement("script"); - scriptTag.setAttribute("type", "text/javascript"); - scriptTag.dataset.content = base64; - scriptTag.innerHTML = script; - parent.appendChild(scriptTag); - } -} - -loadResource("https://gitlab.com/idotj/mastodon-embed-feed-timeline/-/raw/91677cc3a76b300428ed478f4cd4e546e34f827b/src/mastodon-timeline.min.js"); -loadResource("https://gitlab.com/idotj/mastodon-embed-feed-timeline/-/raw/91677cc3a76b300428ed478f4cd4e546e34f827b/src/mastodon-timeline.min.css"); - -/** - * @param {HTMLElement} feedElement - */ -const createMastodonScript = async (feedElement) => { - if (!feedElement.dataset.init) { - - - feedElement.dataset.init = "true"; - } -}; - -[...document.querySelectorAll("[data-mastodon]")].forEach(createMastodonScript); diff --git a/shared/static/shared/svg/share-icons/mastodon-brands.svg b/shared/static/shared/svg/share-icons/mastodon-brands.svg new file mode 100644 index 0000000000000000000000000000000000000000..cf8063e92fe7eb02388bc9fc9a64b69823fe66d9 --- /dev/null +++ b/shared/static/shared/svg/share-icons/mastodon-brands.svg @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + viewBox="0 0 417.99884 448.07172" + version="1.1" + id="svg24" + sodipodi:docname="mastodon-brands.svg" + width="417.99884" + height="448.07172" + inkscape:version="1.0.2 (e86c870879, 2021-01-15)"> + <metadata + id="metadata30"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs28" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1680" + inkscape:window-height="965" + id="namedview26" + showgrid="false" + inkscape:zoom="1.2265625" + inkscape:cx="77.314305" + inkscape:cy="224.00265" + inkscape:window-x="1920" + inkscape:window-y="51" + inkscape:window-maximized="1" + inkscape:current-layer="svg24" + inkscape:document-rotation="0" /> + <!--! Font Awesome Pro 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --> + <path + d="m 417.9831,147.11265 c 0,-97.200002 -63.71,-125.700002 -63.71,-125.700002 -62.52,-28.7000002 -228.56,-28.4000002 -290.480005,0 0,0 -63.71999978,28.5 -63.71999978,125.700002 0,115.7 -6.60000002,259.4 105.63000478,289.1 40.51,10.7 75.32,13 103.33,11.4 50.81,-2.8 79.32,-18.1 79.32,-18.1 l -1.7,-36.9 c 0,0 -36.31,11.4 -77.12,10.1 -40.41,-1.4 -83,-4.4 -89.63,-54 a 102.54,102.54 0 0 1 -0.9,-13.9 c 85.63,20.9 158.65,9.1 178.75,6.7 56.12,-6.7 105,-41.3 111.23,-72.9 9.8,-49.8 9,-121.5 9,-121.5 z m -75.12,125.2 h -46.63 v -114.2 c 0,-49.7 -64,-51.6 -64,6.9 v 62.5 h -46.33 v -62.51 c 0,-58.5 -64,-56.6 -64,-6.9 v 114.2 H 75.173095 c 0,-122.1 -5.2,-147.9 18.41,-175.000002 25.900005,-28.9 79.820005,-30.8 103.830005,6.100002 l 11.6,19.5 11.6,-19.5 c 24.11,-37.100002 78.12,-34.800002 103.83,-6.100002 23.71,27.300002 18.4,53.000002 18.4,175.000002 z" + id="path22" + style="fill-opacity:1;fill:#000000" /> +</svg> diff --git a/shared/templates/shared/blocks/mastodon_feed_block.html b/shared/templates/shared/blocks/mastodon_feed_block.html index f56e811734f99bf0d8874829e0caa44a5a178602..49677866c2515ba2d56f2608a54368f8862f59e0 100644 --- a/shared/templates/shared/blocks/mastodon_feed_block.html +++ b/shared/templates/shared/blocks/mastodon_feed_block.html @@ -1,6 +1,9 @@ -<script type="text/javascript" src="{% static "shared/js/mastodon_helper.js" %}" data-mastodon="true" data-feed="{{ self.url }}" data-user-id="{{ self.userId }}" data-user-name="{{ self.userName }}"></script> -<div class="mt-timeline"> - <div id="mt-body" class="mt-body" role="feed"> - <div class="loading-spinner"></div> - </div> -</div> +{% load static shared_filters %} + +<iframe + allowfullscreen + sandbox="allow-top-navigation allow-scripts allow-popups allow-popups-to-escape-sandbox" + width="400" + height="800" + src="https://mastofeed.com/apiv2/feed?userurl={{ self.url | mastodon_url:self.user_name | urlencode:'' }}&theme=dark&size=100&header=true&replies=false&boosts=false"> +</iframe> diff --git a/shared/templates/shared/mastodon_feed_link_snippet.html b/shared/templates/shared/mastodon_feed_link_snippet.html new file mode 100644 index 0000000000000000000000000000000000000000..5368bb63920038f78eb705f49fe393081a4db171 --- /dev/null +++ b/shared/templates/shared/mastodon_feed_link_snippet.html @@ -0,0 +1,9 @@ +{% load shared_filters %} + +{% if page.mastodon_feed %} + <a href="{{ page.mastodon_feed.url | mastodon_url: page.mastodon_feed.user_name }}" class="social-icon ">{% include "shared/mastodon_icon_snippet.html" with size="20" %}</a> +{% elif page.root_page.mastodon_feed %} + <a href="{{ page.root_page.mastodon_feed.url | mastodon_url: page.root_page.mastodon_feed.user_name }}" class="social-icon ">{% include "shared/mastodon_icon_snippet.html" with size="20" %}</a> +{% else %} + <a href="https://mastodon.pirati.cz" class="social-icon ">{% include "shared/mastodon_icon_snippet.html" with size="20" %}</a> +{% endif %} diff --git a/shared/templates/shared/mastodon_feed_snippet.html b/shared/templates/shared/mastodon_feed_snippet.html new file mode 100644 index 0000000000000000000000000000000000000000..5c09a78506bf047fc9ff72fa3dbe0427d22afdde --- /dev/null +++ b/shared/templates/shared/mastodon_feed_snippet.html @@ -0,0 +1,15 @@ +{% load wagtailcore_tags shared_filters %} + +{% if page.mastodon_feed %} + {% include_block page.mastodon_feed %} +{% elif page.root_page.mastodon_feed %} + {% include_block page.root_page.mastodon_feed %} +{% else %} + <iframe + allowfullscreen + sandbox="allow-top-navigation allow-scripts allow-popups allow-popups-to-escape-sandbox" + width="400" + height="800" + src="https://mastofeed.com/api/feed?url={{ 'https://mastodon.pirati.cz' | urlencode:'' }}&theme=dark&size=100&header=true&replies=false&boosts=false"> + </iframe> +{% endif %} diff --git a/shared/templates/shared/mastodon_icon_snippet.html b/shared/templates/shared/mastodon_icon_snippet.html new file mode 100644 index 0000000000000000000000000000000000000000..4943741263ba1d05b29b1b07cc43303f902dc019 --- /dev/null +++ b/shared/templates/shared/mastodon_icon_snippet.html @@ -0,0 +1,9 @@ +{% load static %} + +<img + src="{% static 'shared/svg/share-icons/mastodon-brands.svg' %}" + alt="Sdílet na Mastodonu" + class="{{ class_name }}" + height="{{ size }}" + width="{{ size }}" +> diff --git a/shared/templatetags/shared_filters.py b/shared/templatetags/shared_filters.py index 2f06f9ad6a92564d9e3e51757ad0d935f2f7f84f..c216b263b200ca699a32ff1dc55f4fc3966288b3 100644 --- a/shared/templatetags/shared_filters.py +++ b/shared/templatetags/shared_filters.py @@ -1,5 +1,6 @@ import markdown as md from django import template +from django.utils.http import urlencode as urlencodeInternal from django.utils.safestring import mark_safe register = template.Library() @@ -9,3 +10,15 @@ register = template.Library() def markdown(value): """Prekonvertuje vstupni text na markdown, necekane""" return mark_safe(md.markdown(value)) + + +@register.filter +def mastodon_url(url: str | None, name: str | None = None): + """ + Gets mastodon url + """ + if url is None or url == "/": + return "https://mastodon.pirati.cz" + if name is None or name == "": + return url + return url + "/users/" + name diff --git a/uniweb/models.py b/uniweb/models.py index 42389c9de3ddf587262948ca1d37b00549c5bd25..9eeb63441ebbdad2722d755ec8b09c1fac87132d 100644 --- a/uniweb/models.py +++ b/uniweb/models.py @@ -1,3 +1,5 @@ +import random + from captcha.fields import CaptchaField from django import forms from django.core.paginator import Paginator @@ -29,9 +31,10 @@ from shared.models import ( ArticleMixin, ExtendedMetadataHomePageMixin, ExtendedMetadataPageMixin, + HomepageMixin, SubpageMixin, ) -from shared.utils import make_promote_panels +from shared.utils import make_promote_panels, strip_all_html_tags, trim_to_length from tuning import admin_help from .blocks import PeopleGroupListBlock, PersonCustomPositionBlock, PersonUrlBlock @@ -298,7 +301,7 @@ class UniwebArticleTag(TaggedItemBase): class UniwebHomePage( - Page, ExtendedMetadataHomePageMixin, MetadataPageMixin, CalendarMixin + Page, ExtendedMetadataHomePageMixin, MetadataPageMixin, CalendarMixin, HomepageMixin ): ### FIELDS @@ -364,6 +367,7 @@ class UniwebHomePage( ], "nastavení patičky", ), + FieldPanel("mastodon_feed"), ] menu_panels = [FieldPanel("top_menu")] @@ -771,7 +775,10 @@ class UniwebPeoplePage( ### PANELS - content_panels = Page.content_panels + [FieldPanel("content")] + content_panels = Page.content_panels + [ + FieldPanel("content"), + FieldPanel("mastodon_feed"), + ] promote_panels = make_promote_panels() diff --git a/uniweb/templates/uniweb/base.html b/uniweb/templates/uniweb/base.html index 7f17985382b858ce71d75d7c4f0fd8c3d208afa5..965af5f33204e05fec381f7d893c797d658943a0 100644 --- a/uniweb/templates/uniweb/base.html +++ b/uniweb/templates/uniweb/base.html @@ -109,6 +109,7 @@ <a href="https://www.youtube.com/user/CeskaPiratskaStrana" class="social-icon "><i class="ico--youtube"></i></a> <a href="https://www.instagram.com/pirati.cz/" class="social-icon "><i class="ico--instagram"></i></a> <a href="https://www.flickr.com/photos/pirati/" class="social-icon "><i class="ico--flickr"></i></a> + {% include "shared/mastodon_feed_link_snippet" %} </div> {% endif %} </div>