From 64b8b85d8ca43c4c3a409afced85c955d2b48b60 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <git@imaniti.org>
Date: Tue, 30 Jan 2024 17:57:39 +0100
Subject: [PATCH] add custom link blocks instead of hardcoded amount

---
 donate/blocks.py                              |  8 ++++
 ...ve_donatehomepage_custom_url_1_and_more.py | 36 +++++++++++++++++
 donate/models.py                              | 22 +++++-----
 donate/templates/donate/base.html             | 40 ++++---------------
 4 files changed, 61 insertions(+), 45 deletions(-)
 create mode 100644 donate/migrations/0042_remove_donatehomepage_custom_url_1_and_more.py

diff --git a/donate/blocks.py b/donate/blocks.py
index 421df84b..1b8ae3c9 100644
--- a/donate/blocks.py
+++ b/donate/blocks.py
@@ -13,6 +13,14 @@ from wagtail.images.blocks import ImageChooserBlock
 from donate.constants import RICH_TEXT_FEATURES
 
 
+class CustomLinkBlock(StructBlock):
+    text = CharBlock(label="Nadpis")
+    url = URLBlock(label="Odkaz")
+
+    class Meta:
+        label = "Extra odkaz"
+
+
 class ProjectIndexBlock(StructBlock):
     page = PageChooserBlock(
         label="Stránka se seznamem",
diff --git a/donate/migrations/0042_remove_donatehomepage_custom_url_1_and_more.py b/donate/migrations/0042_remove_donatehomepage_custom_url_1_and_more.py
new file mode 100644
index 00000000..a39db0a7
--- /dev/null
+++ b/donate/migrations/0042_remove_donatehomepage_custom_url_1_and_more.py
@@ -0,0 +1,36 @@
+# Generated by Django 4.1.10 on 2024-01-30 16:54
+
+from django.db import migrations
+import wagtail.blocks
+import wagtail.fields
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('donate', '0041_donateprojectpage_is_sticky_and_more'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='donatehomepage',
+            name='custom_url_1',
+        ),
+        migrations.RemoveField(
+            model_name='donatehomepage',
+            name='custom_url_1_text',
+        ),
+        migrations.RemoveField(
+            model_name='donatehomepage',
+            name='custom_url_2',
+        ),
+        migrations.RemoveField(
+            model_name='donatehomepage',
+            name='custom_url_2_text',
+        ),
+        migrations.AddField(
+            model_name='donatehomepage',
+            name='custom_links',
+            field=wagtail.fields.StreamField([('custom_link', wagtail.blocks.StructBlock([('text', wagtail.blocks.CharBlock(label='Nadpis')), ('url', wagtail.blocks.URLBlock(label='Odkaz'))], label='Vlastní odkaz'))], blank=True, use_json_field=True, verbose_name='Vlastní odkazy'),
+        ),
+    ]
diff --git a/donate/models.py b/donate/models.py
index 7d5dbc19..3a9221cf 100644
--- a/donate/models.py
+++ b/donate/models.py
@@ -32,6 +32,7 @@ from tuning import admin_help
 from .blocks import (
     CrowdfundingRewardBlock,
     CustomContentBlock,
+    CustomLinkBlock,
     DistrictDonationBlock,
     PartySupportFormBlock,
     ProjectIndexBlock,
@@ -140,14 +141,14 @@ class DonateHomePage(
         related_name="FAQ",
         verbose_name="Stránka s FAQ",
     )
-    custom_url_1 = models.URLField("Vlastní odkaz 1", blank=True, null=True)
-    custom_url_1_text = models.CharField(
-        "Text vlastního odkazu 1", max_length=128, blank=True
-    )
-    custom_url_2 = models.URLField("Vlastní odkaz 2", blank=True, null=True)
-    custom_url_2_text = models.CharField(
-        "Text vlastního odkazu 2", max_length=128, blank=True
+
+    custom_links = StreamField(
+        [("custom_link", CustomLinkBlock(label="Vlastní odkaz"))],
+        verbose_name="Vlastní odkazy",
+        blank=True,
+        use_json_field=True,
     )
+
     facebook = models.URLField("Facebook URL", blank=True, null=True)
     instagram = models.URLField("Instagram URL", blank=True, null=True)
     twitter = models.URLField("Twitter URL", blank=True, null=True)
@@ -175,12 +176,7 @@ class DonateHomePage(
 
     settings_panels = [
         MultiFieldPanel(
-            [
-                FieldPanel("custom_url_1"),
-                FieldPanel("custom_url_1_text"),
-                FieldPanel("custom_url_2"),
-                FieldPanel("custom_url_2_text"),
-            ],
+            [FieldPanel("custom_links")],
             "vlastní odkazy",
         ),
         MultiFieldPanel(
diff --git a/donate/templates/donate/base.html b/donate/templates/donate/base.html
index 48942df1..1393e5a4 100644
--- a/donate/templates/donate/base.html
+++ b/donate/templates/donate/base.html
@@ -48,29 +48,17 @@
   {% block header %}
   <div class="pre-navbar d-none d-lg-flex" style="background:black;">
     <div class="container d-flex justify-content-end">
-      {% if page.root_page.custom_url_1 and page.root_page.custom_url_1_text %}
+      {% for custom_link in page.root_page.custom_links %}
         <a
-          href="{{ page.root_page.custom_url_1 }}"
+          href="{{ custom_link.value.url }}"
           class="header_link header_link--desktop mr-4 py-2"
           target="_blank"
           rel="noreferrer"
         >
           <i class="icon-external-link mr-2" title="Ikona odkazu"></i>
-          {{ page.root_page.custom_url_1_text }}
+          {{ custom_link.value.text }}
         </a>
-      {% endif %}
-
-      {% if page.root_page.custom_url_2 and page.root_page.custom_url_2_text %}
-        <a
-          href="{{ page.root_page.custom_url_2 }}"
-          class="header_link header_link--desktop mr-4 py-2"
-          target="_blank"
-          rel="noreferrer"
-        >
-          <i class="icon-external-link mr-2" title="Ikona odkazu"></i>
-          {{ page.root_page.custom_url_2_text }}
-        </a>
-      {% endif %}
+      {% endfor %}
     </div>
   </div>
 
@@ -102,29 +90,17 @@
           {% endfor %}
         </ul>
 
-        {% if page.root_page.custom_url_1 and page.root_page.custom_url_1_text %}
-          <a
-            href="{{ page.root_page.custom_url_1 }}"
-            class="d-block d-lg-none mb-3 header_link header_link--mobile"
-            target="_blank"
-            rel="noreferrer"
-          >
-            <i class="icon-external-link mr-2" title="Ikona odkazu"></i>
-            {{ page.root_page.custom_url_1_text }}
-          </a>
-        {% endif %}
-
-        {% if page.root_page.custom_url_2 and page.root_page.custom_url_2_text %}
+        {% for custom_link in page.root_page.custom_links %}
           <a
-            href="{{ page.root_page.custom_url_2 }}"
+            href="{{ custom_link.value.url }}"
             class="d-block d-lg-none mb-3 header_link header_link--mobile"
             target="_blank"
             rel="noreferrer"
           >
             <i class="icon-external-link mr-2" title="Ikona odkazu"></i>
-            {{ page.root_page.custom_url_2_text }}
+            {{ custom_link.value.text }}
           </a>
-        {% endif %}
+        {% endfor %}
       </div><!-- /navigation -->
     </div><!-- /container -->
   </nav>
-- 
GitLab