style partner list

This commit is contained in:
Tobias Brunner 2025-02-25 11:27:47 +01:00
parent 2bdc495c46
commit fc06226f5a
No known key found for this signature in database

View file

@ -1,93 +1,146 @@
{% extends 'services/base.html' %} {% extends 'services/base.html' %}
{% block content %} {% block content %}
<div class="row"> <section class="section bg-primary-subtle">
<div class="col-md-3"> <div class="container mx-auto px-20 px-lg-0 pt-40 pb-60">
<div class="card"> <header class="section-primary__header text-center">
<div class="card-body"> <h2 class="section-h1 fs-40 fs-lg-64 mb-24">Consulting Partners</h2>
<h5 class="card-title">Filters</h5> <div class="text-gray-300 w-lg-37 mx-auto">
<form method="get"> <p class="mb-0">Explore our available consulting partners</p>
<div class="mb-3">
<label for="search" class="form-label">Search</label>
<input type="text" class="form-control" id="search" name="search" value="{{ request.GET.search }}">
</div>
<div class="mb-3">
<label for="cloud_provider" class="form-label">Cloud Provider</label>
<select class="form-select" id="cloud_provider" name="cloud_provider">
<option value="">All Providers</option>
{% for provider in cloud_providers %}
<option value="{{ provider.id }}" {% if request.GET.cloud_provider == provider.id|stringformat:'i' %}selected{% endif %}>
{{ provider.name }}
</option>
{% endfor %}
</select>
</div>
<button type="submit" class="btn btn-primary">Apply Filters</button>
<a href="{% url 'services:partner_list' %}" class="btn btn-secondary">Clear</a>
</form>
</div> </div>
</div> </header>
</div> </div>
</section>
<div class="col-md-9"> <section class="section">
<div class="row row-cols-1 row-cols-md-2 g-4"> <div class="container-xl mx-auto px-3 px-lg-0 pt-60 pt-lg-80 pb-40">
{% for partner in partners %} <div x-data="{ open: window.innerWidth > 1024 }"
<div class="col"> @resize.window="open = window.innerWidth > 1024 ? open : true" class="d-lg-flex">
<div class="card h-100"> <!-- Filters -->
<div class="card-body"> <div class="w-lg-20 flex-none">
<div class="d-flex align-items-center mb-3"> <!-- Mobile Menu -->
{% if partner.logo %} <div class="page-action d-lg-none mb-40">
<img src="{{ partner.logo.url }}" <button @click="open = !open"
alt="{{ partner.name }}" class="btn btn-outline-primary btn-md w-100 d-flex justify-content-center align-items-center"
class="me-3" style="max-height: 60px; max-width: 120px; object-fit: contain;"> type="button">
{% endif %} <svg width="24" height="24" viewBox="0 0 24 24" fill="none"
<h5 class="card-title mb-0">{{ partner.name }}</h5> xmlns="http://www.w3.org/2000/svg">
<mask id="mask0_115_3182" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0"
y="0" width="24" height="24">
<rect width="24" height="24" fill="#D9D9D9" />
</mask>
<g mask="url(#mask0_115_3182)">
<path d="M7 18V16H17V18H7ZM5 13V11H19V13H5ZM3 8V6H21V8H3Z" fill="#9A63EC" />
</g>
</svg>
<span class="ms-2">Filters</span>
</button>
</div>
<!-- Desktop View -->
<div x-cloak x-show="open || window.innerWidth >= 1024" class="w-lg-85" x-collapse>
<div class="d-flex d-lg-none justify-content-between align-items-center mb-24"
role="button">
<h3 class="sidebar-dropdown__title mb-0">Filters</h3>
<span @click="open = false">
<svg width="24" height="25" viewBox="0 0 24 25" fill="none"
xmlns="http://www.w3.org/2000/svg">
<mask id="mask0_115_3177" style="mask-type:alpha" maskUnits="userSpaceOnUse"
x="0" y="0" width="24" height="25">
<rect y="0.5" width="24" height="24" fill="#D9D9D9" />
</mask>
<g mask="url(#mask0_115_3177)">
<path d="M6.4 19.5L5 18.1L10.6 12.5L5 6.9L6.4 5.5L12 11.1L17.6 5.5L19 6.9L13.4 12.5L19 18.1L17.6 19.5L12 13.9L6.4 19.5Z"
fill="#160037" />
</g>
</svg>
</span>
</div>
<div class="search-form position-relative mb-24">
<form method="get" x-data="{submitForm() { $refs.filterForm.submit(); } }" x-ref="filterForm">
<!-- Search -->
<div class="mb-24">
<label for="search" class="d-none">Search</label>
<input type="text" id="search" class="input-search" placeholder="Search" name="search" value="{{ request.GET.search }}">
<button class="search-button position-absolute top-0 start-0 d-flex justify-content-center align-items-center border-0 bg-transparent p-0"
type="button" title="search">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M17.5 17.5L22 22" stroke="#9A63EC" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />
<path d="M20 11C20 6.02944 15.9706 2 11 2C6.02944 2 2 6.02944 2 11C2 15.9706 6.02944 20 11 20C15.9706 20 20 15.9706 20 11Z"
stroke="#9A63EC" stroke-width="1.5" stroke-linejoin="round" />
</svg>
</button>
</div> </div>
<div class="rich-text-content mb-3"> <!-- Cloud Provider Filter -->
{{ partner.description|safe|truncatewords_html:50 }} <div class="pt-24 mb-24">
</div> <div class="d-flex justify-content-between align-items-center h-33 mb-5px" role="button">
<h3 class="sidebar-title mb-0">Cloud Provider</h3>
<div class="mb-3"> </div>
<strong>Cloud Providers:</strong> <div>
<div class="mt-2"> <select class="form-select" id="cloud_provider" name="cloud_provider" @change="submitForm()">
{% for provider in partner.cloud_providers.all %} <option value="">All Providers</option>
<div class="d-inline-block me-2 mb-2"> {% for provider in cloud_providers %}
{% if provider.logo %} <option value="{{ provider.id }}" {% if request.GET.cloud_provider == provider.id|stringformat:'i' %}selected{% endif %}>
<img src="{{ provider.logo.url }}" {{ provider.name }}
alt="{{ provider.name }}" </option>
style="max-height: 25px; max-width: 50px; object-fit: contain;"> {% endfor %}
{% else %} </select>
<span class="badge bg-secondary">{{ provider.name }}</span>
{% endif %}
</div>
{% endfor %}
</div> </div>
</div> </div>
<div class="mb-3"> <!-- Filter Actions -->
<strong>Services Available:</strong> {{ partner.services.count }} <div class="d-flex gap-2">
<a href="{% url 'services:partner_list' %}" class="btn btn-outline-secondary btn-sm">Clear</a>
</div> </div>
</form>
</div>
</div>
</div>
<div class="mt-auto"> <!-- Partners Listing -->
<a href="{{ partner.get_absolute_url }}" class="btn btn-primary">View Details</a> <div class="section__grid flex-1">
{% if partner.website %} <div class="row">
<a href="{{ partner.website }}" class="btn btn-outline-secondary" target="_blank">Visit Website</a> {% for partner in partners %}
{% endif %} <div class="col-12 col-md-6 col-lg-4 mb-30">
<div class="card h-100 d-flex flex-column">
<div class="card__content d-flex flex-column flex-grow-1">
<div class="card__header">
<div class="d-flex align-items-start mb-3">
<div class="me-3">
<a href="{{ partner.get_absolute_url }}">
<img src="{{ partner.logo.url }}"
alt="{{ partner.name }}"
style="max-height: 75px; max-width: 200px; object-fit: contain;">
</a>
</div>
</div>
</div>
<div class="card__desc flex-grow-1 rich-text-content">
{{ partner.description|safe|truncatewords_html:30 }}
</div>
<div class="card__footer mt-3">
<div class="d-flex gap-2">
{% if partner.website %}
<a href="{{ partner.website }}" class="btn btn-primary btn-sm" target="_blank">Visit Website</a>
{% endif %}
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> {% empty %}
{% empty %} <div class="col-12">
<div class="col"> <div class="alert alert-info">
<div class="alert alert-info"> No consulting partners found matching your criteria.
No consulting partners found matching your criteria. </div>
</div> </div>
{% endfor %}
</div> </div>
{% endfor %} </div>
</div> </div>
</div> </div>
</div> </section>
{% endblock %} {% endblock %}