From 298b7428cdf8d39e2704a64fefb5a6e64ee5adb6 Mon Sep 17 00:00:00 2001
From: "jindra12.underdark" <jindra12.underdark@gmail.com>
Date: Sat, 22 Apr 2023 21:18:54 +0200
Subject: [PATCH] Fix UI errors

#184
#190
---
 ...trictarticlepage_mastodon_feed_and_more.py | 558 ++++++++++++++++++
 district/templates/district/base.html         |   2 +-
 .../0006_senatehomepage_mastodon_feed.py      |  48 ++
 senate/templates/senate/base.html             |   2 +-
 shared/blocks.py                              |   8 +-
 shared/models.py                              |   2 +-
 .../shared/blocks/mastodon_feed_block.html    |  18 +-
 .../shared/mastodon_feed_link_snippet.html    |   7 -
 .../shared/mastodon_feed_snippet.html         |   4 +-
 .../shared/mastodon_icon_snippet.html         |   3 +
 shared/templatetags/shared_filters.py         |   6 +-
 ...niwebarticlepage_mastodon_feed_and_more.py | 252 ++++++++
 uniweb/templates/uniweb/base.html             |   5 +-
 13 files changed, 890 insertions(+), 25 deletions(-)
 create mode 100644 district/migrations/0109_districtarticlepage_mastodon_feed_and_more.py
 create mode 100644 senate/migrations/0006_senatehomepage_mastodon_feed.py
 delete mode 100644 shared/templates/shared/mastodon_feed_link_snippet.html
 create mode 100644 uniweb/migrations/0042_uniwebarticlepage_mastodon_feed_and_more.py

diff --git a/district/migrations/0109_districtarticlepage_mastodon_feed_and_more.py b/district/migrations/0109_districtarticlepage_mastodon_feed_and_more.py
new file mode 100644
index 00000000..e38906c9
--- /dev/null
+++ b/district/migrations/0109_districtarticlepage_mastodon_feed_and_more.py
@@ -0,0 +1,558 @@
+# Generated by Django 4.1.8 on 2023-04-22 16:15
+
+import wagtail.blocks
+import wagtail.fields
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("district", "0108_alter_districtcenterpage_content_and_more"),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name="districtarticlepage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+        migrations.AddField(
+            model_name="districtarticlespage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+        migrations.AddField(
+            model_name="districtcenterpage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+        migrations.AddField(
+            model_name="districtcontactpage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+        migrations.AddField(
+            model_name="districtcrossroadpage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+        migrations.AddField(
+            model_name="districtcustompage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+        migrations.AddField(
+            model_name="districtelectioncampaignpage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+        migrations.AddField(
+            model_name="districtelectionprogrampage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+        migrations.AddField(
+            model_name="districtgeofeaturecollectionpage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+        migrations.AddField(
+            model_name="districtgeofeaturedetailpage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+        migrations.AddField(
+            model_name="districthomepage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+        migrations.AddField(
+            model_name="districtinteractiveprogrampage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+        migrations.AddField(
+            model_name="districtpeoplepage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+        migrations.AddField(
+            model_name="districtpersonpage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+        migrations.AddField(
+            model_name="districtpostelectionstrategypage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+        migrations.AddField(
+            model_name="districtprogrampage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+    ]
diff --git a/district/templates/district/base.html b/district/templates/district/base.html
index 43e06b00..4431a1de 100644
--- a/district/templates/district/base.html
+++ b/district/templates/district/base.html
@@ -239,7 +239,7 @@
           </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" %}
+              {% include "shared/mastodon_feed_snippet.html" with is_link=False %}
             </div>
           </div>
         </aside>
diff --git a/senate/migrations/0006_senatehomepage_mastodon_feed.py b/senate/migrations/0006_senatehomepage_mastodon_feed.py
new file mode 100644
index 00000000..c7cb7f59
--- /dev/null
+++ b/senate/migrations/0006_senatehomepage_mastodon_feed.py
@@ -0,0 +1,48 @@
+# Generated by Django 4.1.8 on 2023-04-22 16:15
+
+import wagtail.blocks
+import wagtail.fields
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("senate", "0005_alter_senatehomepage_candidates_and_more"),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name="senatehomepage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+    ]
diff --git a/senate/templates/senate/base.html b/senate/templates/senate/base.html
index b45a7bfe..3c29cdca 100644
--- a/senate/templates/senate/base.html
+++ b/senate/templates/senate/base.html
@@ -62,7 +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" %}
+                                    {% include "shared/mastodon_feed_snippet.html" with is_link=True %}
                                 </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 99061111..201977da 100644
--- a/shared/blocks.py
+++ b/shared/blocks.py
@@ -1050,10 +1050,14 @@ class MastodonFeedBlock(blocks.StructBlock):
         label="URL pro mastodon feed",
         default="https://mastodon.pirati.cz",
     )
-    user_name = blocks.CharBlock(required=True, label="Uživatelské jméno pro mastodon")
+    user_name = blocks.CharBlock(
+        required=True,
+        label="Uživatelské jméno pro mastodon",
+        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+    )
 
     class Meta:
-        label = "Mastodon feed"
+        label = "Odkaz na mastodon feed"
         icon = "link"
         template = "shared/blocks/mastodon_feed_block.html"
 
diff --git a/shared/models.py b/shared/models.py
index 1f6aeeb8..b93f0607 100644
--- a/shared/models.py
+++ b/shared/models.py
@@ -24,7 +24,7 @@ class MastodonFeedMixin(models.Model):
         verbose_name="Mastodon feed",
         blank=True,
         use_json_field=True,
-        max_length=1,
+        max_num=1,
     )
 
     class Meta:
diff --git a/shared/templates/shared/blocks/mastodon_feed_block.html b/shared/templates/shared/blocks/mastodon_feed_block.html
index 583fe625..7bda2afd 100644
--- a/shared/templates/shared/blocks/mastodon_feed_block.html
+++ b/shared/templates/shared/blocks/mastodon_feed_block.html
@@ -1,9 +1,13 @@
 {% load static shared_filters %}
 
-<iframe
-    allowfullscreen
-    sandbox="allow-top-navigation allow-scripts allow-popups allow-popups-to-escape-sandbox"
-    width="400"
-    height="400"
-    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>
+{% if is_link %}
+    <a href="{{ self.url | mastodon_url:self.user_name }}" class="social-icon ">{% include "shared/mastodon_icon_snippet.html" with size="14" invert=True %}</a>
+{% else %}
+    <iframe
+        allowfullscreen
+        sandbox="allow-top-navigation allow-scripts allow-popups allow-popups-to-escape-sandbox"
+        width="400"
+        height="400"
+        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>
+{% endif %}
diff --git a/shared/templates/shared/mastodon_feed_link_snippet.html b/shared/templates/shared/mastodon_feed_link_snippet.html
deleted file mode 100644
index ba639792..00000000
--- a/shared/templates/shared/mastodon_feed_link_snippet.html
+++ /dev/null
@@ -1,7 +0,0 @@
-{% 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>
-{% endif %}
diff --git a/shared/templates/shared/mastodon_feed_snippet.html b/shared/templates/shared/mastodon_feed_snippet.html
index 042b0085..b3daaa72 100644
--- a/shared/templates/shared/mastodon_feed_snippet.html
+++ b/shared/templates/shared/mastodon_feed_snippet.html
@@ -1,7 +1,7 @@
 {% load wagtailcore_tags shared_filters %}
 
 {% if page.mastodon_feed %}
-    {% include_block page.mastodon_feed %}
+    {% include_block page.mastodon_feed with is_link=is_link %}
 {% elif page.root_page.mastodon_feed %}
-    {% include_block page.root_page.mastodon_feed %}
+    {% include_block page.root_page.mastodon_feed with is_link=is_link %}
 {% endif %}
diff --git a/shared/templates/shared/mastodon_icon_snippet.html b/shared/templates/shared/mastodon_icon_snippet.html
index 49437412..ca9df0c7 100644
--- a/shared/templates/shared/mastodon_icon_snippet.html
+++ b/shared/templates/shared/mastodon_icon_snippet.html
@@ -6,4 +6,7 @@
     class="{{ class_name }}"
     height="{{ size }}"
     width="{{ size }}"
+    {% if invert %}
+        style="filter: invert(1)"
+    {% endif %}
 >
diff --git a/shared/templatetags/shared_filters.py b/shared/templatetags/shared_filters.py
index c216b263..547d296f 100644
--- a/shared/templatetags/shared_filters.py
+++ b/shared/templatetags/shared_filters.py
@@ -13,12 +13,12 @@ def markdown(value):
 
 
 @register.filter
-def mastodon_url(url: str | None, name: str | None = None):
+def mastodon_url(url: str | None, user_name: str | None = None):
     """
     Gets mastodon url
     """
     if url is None or url == "/":
         return "https://mastodon.pirati.cz"
-    if name is None or name == "":
+    if user_name is None or user_name == "":
         return url
-    return url + "/users/" + name
+    return url + "/users/" + user_name
diff --git a/uniweb/migrations/0042_uniwebarticlepage_mastodon_feed_and_more.py b/uniweb/migrations/0042_uniwebarticlepage_mastodon_feed_and_more.py
new file mode 100644
index 00000000..9a98aec6
--- /dev/null
+++ b/uniweb/migrations/0042_uniwebarticlepage_mastodon_feed_and_more.py
@@ -0,0 +1,252 @@
+# Generated by Django 4.1.8 on 2023-04-22 16:15
+
+import wagtail.blocks
+import wagtail.fields
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("uniweb", "0041_alter_uniwebflexiblepage_content_and_more"),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name="uniwebarticlepage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+        migrations.AddField(
+            model_name="uniwebarticlesindexpage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+        migrations.AddField(
+            model_name="uniwebflexiblepage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+        migrations.AddField(
+            model_name="uniwebformpage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+        migrations.AddField(
+            model_name="uniwebhomepage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+        migrations.AddField(
+            model_name="uniwebpeoplepage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+        migrations.AddField(
+            model_name="uniwebpersonpage",
+            name="mastodon_feed",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "mastodon_feed",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "url",
+                                    wagtail.blocks.URLBlock(
+                                        default="https://mastodon.pirati.cz",
+                                        label="URL pro mastodon feed",
+                                        required=True,
+                                    ),
+                                ),
+                                (
+                                    "user_name",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Uživatelské jméno vyplňte bez '@' a bez jména feedu. Příklad: 'ivanbartos'",
+                                        label="Uživatelské jméno pro mastodon",
+                                        required=True,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Mastodon feed",
+            ),
+        ),
+    ]
diff --git a/uniweb/templates/uniweb/base.html b/uniweb/templates/uniweb/base.html
index 965af5f3..186e214f 100644
--- a/uniweb/templates/uniweb/base.html
+++ b/uniweb/templates/uniweb/base.html
@@ -39,6 +39,9 @@
     .text-white a {
       color: #FFFFFF;
     }
+    .block-mastodon_feed {
+      display: inline;
+    }
   </style>
 
   {% if page.root_page.matomo_id %}
@@ -109,7 +112,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" %}
+                {% include "shared/mastodon_feed_snippet.html" with is_link=True %}
               </div>
               {% endif %}
             </div>
-- 
GitLab