{% extends 'public/base.html.twig' %} {% trans_default_domain 'public' %} {% import 'public/_icons.html.twig' as icons %} {% block title %}{{ page.title }}{% endblock %} {% block meta %} {% if page.ogImage %} {% endif %} {% endblock %} {% block body %} {% import _self as forms %} {% set hasDetails = page.facts is not empty or page.descriptionHtml %}
{{ page.landlordName }} {% if apply %} {{ icons.icon('file') }}{{ 'apply.navCta'|trans }} {% else %} {{ icons.icon('calendar') }}{{ 'nav.cta'|trans }} {% endif %}
{{ 'hero.available'|trans }}

{{ page.unitName }} {{ page.propertyName }}

{{ icons.icon('pin') }}{{ page.address }}

{% if page.facts %} {% endif %} {% if page.descriptionHtml %}

{{ 'sections.about'|trans }}

{{ page.descriptionHtml|raw }}
{% endif %} {% if page.amenities %}

{{ 'sections.amenities'|trans }}

    {% for amenity in page.amenities %}
  • {{ icons.icon('check') }}{{ amenity }}
  • {% endfor %}
{% endif %} {% if page.videos %}

{{ 'sections.videos'|trans }}

{% for video in page.videos %}
{% if video.embedUrl %} {% else %} {% endif %}
{% endfor %}
{% endif %} {% if page.map %}

{{ 'sections.location'|trans }}

{% endif %}

{{ 'steps.title'|trans }}

    {% for step in [{key: 'one', icon: 'chat'}, {key: 'two', icon: 'calendar'}, {key: 'three', icon: 'key'}] %} {# With bookings on, the first two steps swap round: you pick the time yourself. #} {% set prefix = visit and step.key != 'three' ? 'steps.booking.' : 'steps.' %}
  1. {{ icons.icon(step.icon) }}

    {{ (prefix ~ step.key ~ '.title')|trans }}

    {{ (prefix ~ step.key ~ '.body')|trans({landlord: page.landlordName}) }}

  2. {% endfor %}
{% if page.price %} {{ page.price }}{{ 'price.perMonth'|trans }} {% else %} {{ 'price.onRequest'|trans }} {% endif %}
{% if apply %} {{ 'apply.navCta'|trans }} {% else %} {{ (visit ? 'mobile.ctaVisit' : 'mobile.cta')|trans }} {% endif %}
{% if page.photos %}
{% endif %} {% endblock %} {# The message form, shown on its own when the property takes no bookings and as the second tab when it does. Macros get no outer context, so everything it renders is passed in. #} {% macro contactForm(page, values, errors, formError, tab) %} {# An import is a compile-time symbol, not a context variable, so the macro imports the icons itself. #} {% import 'public/_icons.html.twig' as icons %}

{{ 'contact.title'|trans }}

{{ 'contact.subtitle'|trans({landlord: page.landlordName}) }}

{% if (formError or errors) and tab == 'contact' %} {% endif %}
{% for field in [{name: 'fullName', type: 'text', autocomplete: 'name', max: 180}, {name: 'email', type: 'email', autocomplete: 'email', max: 180}, {name: 'phone', type: 'tel', autocomplete: 'tel', max: 50}] %} {% endfor %}
{% for key in ['quickVisit', 'quickIncludes', 'quickRequirements'] %} {% endfor %}
{% if errors.message is defined %}{{ errors.message|trans }}{% endif %}

{{ icons.icon('lock') }}{{ 'contact.privacy'|trans({landlord: page.landlordName}) }}

{% endmacro %}