From 8718393b78d9a40317b8c8149358cceee0f6bbda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Bedna=C5=99=C3=ADk?= <jan.bednarik@gmail.com> Date: Mon, 25 May 2020 19:52:57 +0200 Subject: [PATCH] senat campaign: Web settings in root page --- calendar_utils/models.py | 4 +- .../migrations/0004_auto_20200525_1951.py | 128 +++++++++++ senat_campaign/models.py | 209 ++++++++++++++++-- .../templates/senat_campaign/base.html | 32 ++- .../senat_campaign_home_page.html | 24 +- .../senat_campaign_news_index_page.html | 4 +- .../senat_campaign/socials_snippet.html | 16 +- 7 files changed, 359 insertions(+), 58 deletions(-) create mode 100644 senat_campaign/migrations/0004_auto_20200525_1951.py diff --git a/calendar_utils/models.py b/calendar_utils/models.py index d1980877..849b2326 100644 --- a/calendar_utils/models.py +++ b/calendar_utils/models.py @@ -63,7 +63,9 @@ class CalendarMixin(models.Model): calendar_url = models.URLField( "URL kalendáře ve formátu iCal", blank=True, null=True ) - calendar = models.ForeignKey(Calendar, null=True, on_delete=models.PROTECT) + calendar = models.ForeignKey( + Calendar, null=True, blank=True, on_delete=models.PROTECT + ) class Meta: abstract = True diff --git a/senat_campaign/migrations/0004_auto_20200525_1951.py b/senat_campaign/migrations/0004_auto_20200525_1951.py new file mode 100644 index 00000000..c9ff99d9 --- /dev/null +++ b/senat_campaign/migrations/0004_auto_20200525_1951.py @@ -0,0 +1,128 @@ +# Generated by Django 3.0.6 on 2020-05-25 17:51 + +import django.db.models.deletion +import wagtail.core.blocks +import wagtail.core.fields +import wagtail.images.blocks +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("calendar_utils", "0002_auto_20200523_0243"), + ("senat_campaign", "0003_auto_20200523_0241"), + ] + + operations = [ + migrations.AddField( + model_name="senatcampaignhomepage", + name="calendar", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + to="calendar_utils.Calendar", + ), + ), + migrations.AddField( + model_name="senatcampaignhomepage", + name="calendar_url", + field=models.URLField( + blank=True, null=True, verbose_name="URL kalendáře ve formátu iCal" + ), + ), + migrations.AddField( + model_name="senatcampaignhomepage", + name="contacts", + field=wagtail.core.fields.StreamField( + [ + ( + "item", + wagtail.core.blocks.StructBlock( + [ + ("name", wagtail.core.blocks.CharBlock(label="jméno")), + ( + "job", + wagtail.core.blocks.CharBlock( + label="pozice", required=False + ), + ), + ( + "phone", + wagtail.core.blocks.CharBlock( + label="telefon", required=False + ), + ), + ( + "email", + wagtail.core.blocks.EmailBlock( + label="email", required=False + ), + ), + ( + "photo", + wagtail.images.blocks.ImageChooserBlock( + label="fotka" + ), + ), + ] + ), + ) + ], + blank=True, + verbose_name="kontaktní osoby", + ), + ), + migrations.AddField( + model_name="senatcampaignhomepage", + name="facebook", + field=models.URLField(blank=True, null=True, verbose_name="Facebook URL"), + ), + migrations.AddField( + model_name="senatcampaignhomepage", + name="first_name", + field=models.CharField(default="", max_length=250, verbose_name="jméno"), + preserve_default=False, + ), + migrations.AddField( + model_name="senatcampaignhomepage", + name="instagram", + field=models.URLField(blank=True, null=True, verbose_name="Instagram URL"), + ), + migrations.AddField( + model_name="senatcampaignhomepage", + name="last_name", + field=models.CharField(default="", max_length=250, verbose_name="příjmení"), + preserve_default=False, + ), + migrations.AddField( + model_name="senatcampaignhomepage", + name="linkedin", + field=models.URLField(blank=True, null=True, verbose_name="LinkedIn URL"), + ), + migrations.AddField( + model_name="senatcampaignhomepage", + name="matomo_id", + field=models.IntegerField( + blank=True, + null=True, + verbose_name="Matomo ID pro sledování návštěvnosti", + ), + ), + migrations.AddField( + model_name="senatcampaignhomepage", + name="twitter", + field=models.URLField(blank=True, null=True, verbose_name="Twitter URL"), + ), + migrations.AlterField( + model_name="senatcampaignwebsettings", + name="calendar", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + to="calendar_utils.Calendar", + ), + ), + ] diff --git a/senat_campaign/models.py b/senat_campaign/models.py index e2a066c0..f472a23f 100644 --- a/senat_campaign/models.py +++ b/senat_campaign/models.py @@ -1,6 +1,9 @@ from django.db import models +from django.utils.translation import gettext_lazy from wagtail.admin.edit_handlers import ( FieldPanel, + HelpPanel, + MultiFieldPanel, ObjectList, StreamFieldPanel, TabbedInterface, @@ -16,7 +19,19 @@ from wagtail.images.edit_handlers import ImageChooserPanel from calendar_utils.models import CalendarMixin -class SenatCampaignHomePage(Page): +class ContactBlock(blocks.StructBlock): + name = blocks.CharBlock(label="jméno") + job = blocks.CharBlock(label="pozice", required=False) + phone = blocks.CharBlock(label="telefon", required=False) + email = blocks.EmailBlock(label="email", required=False) + photo = ImageChooserBlock(label="fotka") + + class Meta: + icon = "person" + label = "kontaktní osoba" + + +class SenatCampaignHomePage(Page, CalendarMixin): # top section headline = models.CharField("podtitulek pod jménem", max_length=250, blank=True) top_photo = models.ForeignKey( @@ -62,17 +77,73 @@ class SenatCampaignHomePage(Page): verbose_name="transparentní financování", blank=True, ) + # settings + first_name = models.CharField("jméno", max_length=250) + last_name = models.CharField("příjmení", max_length=250) + 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) + linkedin = models.URLField("LinkedIn URL", blank=True, null=True) + contacts = StreamField( + [("item", ContactBlock())], verbose_name="kontaktní osoby", blank=True + ) + matomo_id = models.IntegerField( + "Matomo ID pro sledování návštěvnosti", blank=True, null=True + ) content_panels = Page.content_panels + [ - FieldPanel("headline"), - ImageChooserPanel("top_photo"), - FieldPanel("claim"), - FieldPanel("about_left", classname="full"), - FieldPanel("about_right", classname="full"), - StreamFieldPanel("about_gallery"), + MultiFieldPanel( + [ + FieldPanel("first_name"), + FieldPanel("last_name"), + FieldPanel("headline"), + ], + heading="úvod", + ), + MultiFieldPanel( + [ImageChooserPanel("top_photo"), FieldPanel("claim"),], + heading="úvodní foto", + ), + MultiFieldPanel( + [ + FieldPanel("about_left", classname="full"), + FieldPanel("about_right", classname="full"), + StreamFieldPanel("about_gallery"), + ], + heading="kdo jsem", + ), StreamFieldPanel("financials"), ] + promote_panels = [ + MultiFieldPanel( + [ + HelpPanel( + "Název stránky na předchozím tabu slouží k rozlišení stránek " + "v Majáku. V prohlížeči se zobrazí tento titulek." + ), + FieldPanel("seo_title"), + FieldPanel("search_description"), + ], + gettext_lazy("Common page configuration"), + ), + ] + + settings_panels = [ + MultiFieldPanel( + [ + FieldPanel("facebook"), + FieldPanel("instagram"), + FieldPanel("twitter"), + FieldPanel("linkedin"), + ], + heading="Sociální sítě", + ), + FieldPanel("calendar_url"), + FieldPanel("matomo_id"), + StreamFieldPanel("contacts"), + ] + subpage_types = [ "senat_campaign.SenatCampaignNewsIndexPage", "senat_campaign.SenatCampaignProgramPage", @@ -85,6 +156,44 @@ class SenatCampaignHomePage(Page): class Meta: verbose_name = "Senát kampaň" + @property + def root_page(self): + return self + + @property + def full_name(self): + return f"{self.first_name} {self.last_name}" + + @property + def has_program(self): + return self.get_descendants().type(SenatCampaignProgramPage).live().exists() + + @property + def has_news(self): + return self.get_descendants().type(SenatCampaignNewsIndexPage).live().exists() + + @property + def has_calendar(self): + return self.calendar_id is not None + + @property + def has_donations(self): + # TODO + return False + + @property + def cookies_page_url(self): + try: + return ( + self.get_descendants() + .type(SenatCampaignCookiesPage) + .live() + .get() + .get_url() + ) + except Page.DoesNotExist: + return "#" + def get_context(self, request): context = super().get_context(request) @@ -126,12 +235,31 @@ class SenatCampaignNewsIndexPage(Page): parent_page_types = ["senat_campaign.SenatCampaignHomePage"] subpage_types = ["senat_campaign.SenatCampaignNewsPage"] + promote_panels = [ + MultiFieldPanel( + [ + FieldPanel("slug"), + FieldPanel("seo_title"), + FieldPanel("search_description"), + ], + gettext_lazy("Common page configuration"), + ), + ] + + settings_panels = [] + # flag for rendering anchor links in menu is_home = False class Meta: verbose_name = "Aktuality" + @property + def root_page(self): + if not hasattr(self, "_root_page"): + self._root_page = self.get_parent().specific + return self._root_page + def get_context(self, request): context = super().get_context(request) articles = self.get_children().live().order_by("-senatcampaignnewspage__date") @@ -158,6 +286,17 @@ class SenatCampaignNewsPage(Page): ImageChooserPanel("photo"), ] + promote_panels = [ + MultiFieldPanel( + [ + FieldPanel("slug"), + FieldPanel("seo_title"), + FieldPanel("search_description"), + ], + gettext_lazy("Common page configuration"), + ), + ] + parent_page_types = ["senat_campaign.SenatCampaignNewsIndexPage"] subpage_types = [] @@ -167,6 +306,14 @@ class SenatCampaignNewsPage(Page): class Meta: verbose_name = "Aktualita" + @property + def root_page(self): + if not hasattr(self, "_root_page"): + self._root_page = ( + self.get_ancestors().type(SenatCampaignHomePage).specific().get() + ) + return self._root_page + def get_context(self, request): context = super().get_context(request) context["related_articles"] = ( @@ -203,6 +350,19 @@ class SenatCampaignProgramPage(Page): StreamFieldPanel("content"), ] + promote_panels = [ + MultiFieldPanel( + [ + FieldPanel("slug"), + FieldPanel("seo_title"), + FieldPanel("search_description"), + ], + gettext_lazy("Common page configuration"), + ), + ] + + settings_panels = [] + parent_page_types = ["senat_campaign.SenatCampaignHomePage"] subpage_types = [] @@ -212,6 +372,12 @@ class SenatCampaignProgramPage(Page): class Meta: verbose_name = "Program" + @property + def root_page(self): + if not hasattr(self, "_root_page"): + self._root_page = self.get_parent().specific + return self._root_page + class SenatCampaignCookiesPage(Page): body = RichTextField("obsah", blank=True) @@ -220,6 +386,19 @@ class SenatCampaignCookiesPage(Page): FieldPanel("body", classname="full"), ] + promote_panels = [ + MultiFieldPanel( + [ + FieldPanel("slug"), + FieldPanel("seo_title"), + FieldPanel("search_description"), + ], + gettext_lazy("Common page configuration"), + ), + ] + + settings_panels = [] + parent_page_types = ["senat_campaign.SenatCampaignHomePage"] subpage_types = [] @@ -229,17 +408,11 @@ class SenatCampaignCookiesPage(Page): class Meta: verbose_name = "Cookies" - -class ContactBlock(blocks.StructBlock): - name = blocks.CharBlock(label="jméno") - job = blocks.CharBlock(label="pozice", required=False) - phone = blocks.CharBlock(label="telefon", required=False) - email = blocks.EmailBlock(label="email", required=False) - photo = ImageChooserBlock(label="fotka") - - class Meta: - icon = "person" - label = "kontaktní osoba" + @property + def root_page(self): + if not hasattr(self, "_root_page"): + self._root_page = self.get_parent().specific + return self._root_page @register_setting diff --git a/senat_campaign/templates/senat_campaign/base.html b/senat_campaign/templates/senat_campaign/base.html index 87cce344..1b5c91ae 100644 --- a/senat_campaign/templates/senat_campaign/base.html +++ b/senat_campaign/templates/senat_campaign/base.html @@ -1,5 +1,4 @@ -{% load static wagtailuserbar wagtailcore_tags wagtailsettings_tags wagtailimages_tags %} -{% with web_settings=settings.senat_campaign.SenatCampaignWebSettings %} +{% load static wagtailuserbar wagtailcore_tags wagtailimages_tags %} <!doctype html> <html lang="cs"> <head> @@ -27,11 +26,11 @@ {% if page.seo_title %} <title>{{ page.seo_title }}</title> {% else %} - <title>{{ page.title }} | {{ web_settings.full_name }}</title> + <title>{{ page.title }} | {{ page.root_page.full_name }}</title> {% endif %} <!-- OpenGraph info --> - <meta property="og:title" content="{% firstof page.seo_title page.title web_settings.full_name %}" /> + <meta property="og:title" content="{% firstof page.seo_title page.title page.root_page.full_name %}" /> <meta property="og:type" content="website" /> <meta property="og:locale" content="cs_CZ" /> <meta property="og:url" content="{{ page.full_url }}" /> @@ -54,7 +53,7 @@ <link href="{% static "senat_campaign/assets/css/style.css" %}" rel="stylesheet"> <link href="{% static "senat_campaign/assets/css/icons.css" %}" rel="stylesheet"> - {% if not request.is_preview and web_settings.matomo_id %} + {% if not request.is_preview and page.root_page.matomo_id %} <!-- Matomo --> <script type="text/javascript"> var _paq = window._paq || []; @@ -63,7 +62,7 @@ (function() { var u="//matomo.pirati.cz/"; _paq.push(['setTrackerUrl', u+'matomo.php']); - _paq.push(['setSiteId', '{{ web_settings.matomo_id }}']); + _paq.push(['setSiteId', '{{ page.root_page.matomo_id }}']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -86,7 +85,7 @@ </div> </div> <div class="col-md-6 text-right"> - {% if web_settings.has_donations %} + {% if page.root_page.has_donations %} {# TODO #} <a href="#" class="btn btn-success support_buton btn-sm">Přispěj!<i class="icon-heart ml-2" title="Ikona srdce"></i></a> {% endif %} @@ -100,8 +99,8 @@ <!-- Candidate name --> <div class="brand-wrapper"> - <a class="navbar-brand navbar-brand--primary" href="/">{{ web_settings.first_name }} <strong>{{ web_settings.last_name }}</strong></a> - <a class="navbar-brand navbar-brand--alt" href="/">{{ web_settings.first_name|first }}. <strong>{{ web_settings.last_name }}</strong></a> + <a class="navbar-brand navbar-brand--primary" href="/">{{ page.root_page.first_name }} <strong>{{ page.root_page.last_name }}</strong></a> + <a class="navbar-brand navbar-brand--alt" href="/">{{ page.root_page.first_name|first }}. <strong>{{ page.root_page.last_name }}</strong></a> </div> <!-- Mobile menu toggler --> @@ -121,7 +120,7 @@ <a class="nav-link" href="/#top">Úvod</a> {% endif %} </li> - {% if web_settings.has_program %} + {% if page.root_page.has_program %} <li class="nav-item"> {% if page.is_home %} <a class="nav-link js-scroll-anchor" href="#priority">Priority</a> @@ -137,7 +136,7 @@ <a class="nav-link" href="/#kdojsem">Kdo jsem</a> {% endif %} </li> - {% if web_settings.has_news %} + {% if page.root_page.has_news %} <li class="nav-item"> {% if page.is_home %} <a class="nav-link js-scroll-anchor" href="#aktuality">Aktuality</a> @@ -146,7 +145,7 @@ {% endif %} </li> {% endif %} - {% if web_settings.has_calendar %} + {% if page.root_page.has_calendar %} <li class="nav-item"> {% if page.is_home %} <a class="nav-link js-scroll-anchor" href="#kalendar">Kalendář</a> @@ -169,7 +168,7 @@ <div class="header__socials header__socials--mobile d-xl-none mb-2"> {% include "senat_campaign/socials_snippet.html" %} </div> - {% if web_settings.has_donations %} + {% if page.root_page.has_donations %} {# TODO #} <a href="#" class="btn btn-success support_buton btn-sm d-xl-none mb-3">Přispěj!<i class="icon-heart ml-2" title="Ikona srdce"></i></a> {% endif %} @@ -199,7 +198,7 @@ <div class="row"> - {% for contact in web_settings.contacts %} + {% for contact in page.root_page.contacts %} <div class="col-12 col-md-6 col-xl-4 mb-4 mb-xl-0"> <div class="person"> <div class="person__photo"> @@ -233,10 +232,10 @@ <div class="container"> <div class="row"> <div class="col-12 col-md-6 mb-3 mb-md-0"> - <p class="mb-0">{% now "Y" %} | Zadavatel: {{ web_settings.full_name }} | Zpracovatel: Česká pirátská strana</p> + <p class="mb-0">{% now "Y" %} | Zadavatel: {{ page.root_page.full_name }} | Zpracovatel: Česká pirátská strana</p> </div><!-- /column --> <div class="col-12 col-md-6 text-md-right"> - <p class="mb-0">Tento web využívá soubory cookies - <a href="{{ web_settings.cookies_page_url }}">více informací</a></p> + <p class="mb-0">Tento web využívá soubory cookies - <a href="{{ page.root_page.cookies_page_url }}">více informací</a></p> </div><!-- /column --> </div><!-- /row --> </div><!-- /container --> @@ -254,4 +253,3 @@ </body> </html> -{% endwith %} diff --git a/senat_campaign/templates/senat_campaign/senat_campaign_home_page.html b/senat_campaign/templates/senat_campaign/senat_campaign_home_page.html index 5b5f28c1..647a5def 100644 --- a/senat_campaign/templates/senat_campaign/senat_campaign_home_page.html +++ b/senat_campaign/templates/senat_campaign/senat_campaign_home_page.html @@ -11,11 +11,11 @@ <div class="row align-items-center"> <div class="col-12 col-md-7 col-lg-7 mb-5 mb-md-0 py-4 text-center text-md-left"> - <h1 class="lead homepage-heading">{{ web_settings.full_name }}</h1> + <h1 class="lead homepage-heading">{{ page.root_page.full_name }}</h1> <p class="lead mb-5">{{ page.headline }}</p> <div class="row align-items-center"> - {% if web_settings.has_program %} + {% if page.root_page.has_program %} <div class="col-12 col-lg-auto mb-4 mb-lg-0"> <a href="#priority" class="btn btn-dark btn-lg js-scroll-anchor">Moje priority <i class="icon-chevron-right ml-2"></i></a> </div><!-- /column --> @@ -32,7 +32,7 @@ <div class="col-12 col-md-5 offset-lg-1 col-lg-4 text-center"> {% if page.top_photo %} {% image page.top_photo width-350 as top_photo %} - <img data-src="{{ top_photo.url }}" class="lazyload img-fluid mb-4" alt="{{ web_settings.full_name }}"> + <img data-src="{{ top_photo.url }}" class="lazyload img-fluid mb-4" alt="{{ page.root_page.full_name }}"> {% endif %} <h3 class="lead mb-0">{% if page.claim %}„{{ page.claim }}“{% endif %}</h3> </div><!-- /column --> @@ -42,7 +42,7 @@ </section> - {% if web_settings.has_program %} + {% if page.root_page.has_program %} <section class="section--primary" id="priority"> <div class="container"> <div class="row"> @@ -133,7 +133,7 @@ {% endif %} - {% if web_settings.has_donations %} + {% if page.root_page.has_donations %} <section class="section--black"> <div class="container"> <div class="row align-items-center"> @@ -150,8 +150,8 @@ {% endif %} - {% if web_settings.has_news %} - <section class="section--primary{% if web_settings.has_calendar %} section--no-bottom-padding{% endif %}" id="aktuality"> + {% if page.root_page.has_news %} + <section class="section--primary{% if page.root_page.has_calendar %} section--no-bottom-padding{% endif %}" id="aktuality"> <div class="container"> <h2 class="lead page-subheading mb-4">Aktuality</h2> @@ -184,7 +184,7 @@ {% endif %} - {% if web_settings.has_calendar %} + {% if page.root_page.has_calendar %} <section class="section--primary" id="kalendar"> <div class="container"> @@ -201,7 +201,7 @@ </div><!-- /calendar__left --> <div class="calendar__right"> - {% for event in web_settings.calendar.actual_events %} + {% for event in page.root_page.calendar.actual_events %} {% include "senat_campaign/calendar_event_snippet.html" %} {% empty %} <div class="calendar__row__content"> @@ -247,7 +247,7 @@ {% endif %} - {% if web_settings.has_calendar %} + {% if page.root_page.has_calendar %} <!-- Calendar modal --> <div class="modal fade calendar__modal" id="calendarModal" tabindex="-1" role="dialog" aria-labelledby="calendarModalTitle" aria-hidden="true"> @@ -278,7 +278,7 @@ <div class="calendar__right"> - {% for event in web_settings.calendar.future_events %} + {% for event in page.root_page.calendar.future_events %} {% include "senat_campaign/calendar_event_snippet.html" %} {% empty %} <div class="calendar__row__content"> @@ -292,7 +292,7 @@ <div class="tab-pane fade" id="pastEvents" role="tabpanel" aria-labelledby="pastEvents-tab"> <div class="calendar__right"> - {% for event in web_settings.calendar.past_events|slice:":10" %} + {% for event in page.root_page.calendar.past_events|slice:":10" %} {% include "senat_campaign/calendar_event_snippet.html" %} {% empty %} <div class="calendar__row__content"> diff --git a/senat_campaign/templates/senat_campaign/senat_campaign_news_index_page.html b/senat_campaign/templates/senat_campaign/senat_campaign_news_index_page.html index 23cadb36..391f080e 100644 --- a/senat_campaign/templates/senat_campaign/senat_campaign_news_index_page.html +++ b/senat_campaign/templates/senat_campaign/senat_campaign_news_index_page.html @@ -51,11 +51,11 @@ </div><!-- /column --> - {% if web_settings.facebook %} + {% if page.root_page.facebook %} <div class="col-12 col-lg-4 offset-xl-1 text-center"> <h3 class="lead mb-3">Z mého facebooku</h3> - <iframe src="https://www.facebook.com/plugins/page.php?href={{ web_settings.facebook }}&tabs=timeline&width=290&height=500&small_header=true&adapt_container_width=true&hide_cover=true&show_facepile=false&appId=410144066050191" width="290" height="500" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowTransparency="true" allow="encrypted-media"></iframe> + <iframe src="https://www.facebook.com/plugins/page.php?href={{ page.root_page.facebook }}&tabs=timeline&width=290&height=500&small_header=true&adapt_container_width=true&hide_cover=true&show_facepile=false&appId=410144066050191" width="290" height="500" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowTransparency="true" allow="encrypted-media"></iframe> </div><!-- /column --> {% endif %} diff --git a/senat_campaign/templates/senat_campaign/socials_snippet.html b/senat_campaign/templates/senat_campaign/socials_snippet.html index 2a76e3da..6e500415 100644 --- a/senat_campaign/templates/senat_campaign/socials_snippet.html +++ b/senat_campaign/templates/senat_campaign/socials_snippet.html @@ -1,12 +1,12 @@ -{% if web_settings.facebook %} -<a href="{{ web_settings.facebook }}" target="_blank"><i class="icon-facebook-f" title="Facebooková stránka"></i></a> +{% if page.root_page.facebook %} +<a href="{{ page.root_page.facebook }}" target="_blank"><i class="icon-facebook-f" title="Facebooková stránka"></i></a> {% endif %} -{% if web_settings.twitter %} -<a href="{{ web_settings.twitter }}" target="_blank"><i class="icon-twitter" title="Profil na Twitteru"></i></a> +{% if page.root_page.twitter %} +<a href="{{ page.root_page.twitter }}" target="_blank"><i class="icon-twitter" title="Profil na Twitteru"></i></a> {% endif %} -{% if web_settings.instagram %} -<a href="{{ web_settings.instagram }}" target="_blank"><i class="icon-instagram" title="Profil na Instagramu"></i></a> +{% if page.root_page.instagram %} +<a href="{{ page.root_page.instagram }}" target="_blank"><i class="icon-instagram" title="Profil na Instagramu"></i></a> {% endif %} -{% if web_settings.linkedin %} -<a href="{{ web_settings.linkedin }}" target="_blank"><i class="icon-linkedin" title="Profil na LinkedIn"></i></a> +{% if page.root_page.linkedin %} +<a href="{{ page.root_page.linkedin }}" target="_blank"><i class="icon-linkedin" title="Profil na LinkedIn"></i></a> {% endif %} -- GitLab