350 lines
12 KiB
HTML
350 lines
12 KiB
HTML
{% load i18n %}{% load static %}{% load cms_tags %}{% load sekizai_tags %}<!DOCTYPE html>
|
||
<html lang="de" data-bs-theme="auto">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||
<meta name="language" content="de" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||
<title>{% block title %}{% page_attribute "page_title" %}{% endblock %}</title>
|
||
|
||
<script src="{% static 'froide_govplan/js/color-modes.js' %}"></script>
|
||
|
||
<meta itemprop="name" content="VerwaltungsTracker – Portal für kommunale Transparenz">
|
||
<meta itemprop="description" content="VerwaltungsTracker zeigt transparent, wie weit kommunale Projekte in Karlsruhe vorangeschritten sind – von der Planung bis zur Umsetzung. So behalten Sie den Überblick über die Entwicklung Ihrer Stadt.">
|
||
<meta name="description"
|
||
content="{% block metaDescription %}VerwaltungsTracker zeigt transparent, wie weit kommunale Projekte in Karlsruhe vorangeschritten sind – von der Planung bis zur Umsetzung. So behalten Sie den Überblick über die Entwicklung Ihrer Stadt.{% endblock %}" />
|
||
|
||
<meta name="keywords"
|
||
content="Verwaltung, Transparenz, Kommunalpolitik, Vorhaben, Informationsfreiheitsanfragen, Behördeninformationen" />
|
||
<meta property="og:title" content="{% block ogTitle %}{% page_attribute "page_title" %}{% endblock %}" />
|
||
<meta property="og:type" content="article" />
|
||
<meta property="og:url"
|
||
content="https://verwaltungstracker.de/" />
|
||
|
||
<meta property="og:image"
|
||
content="{% static 'froide_govplan/images/og_image.png' %}" />
|
||
|
||
<meta property="og:description" content="{% block ogDescription %}VerwaltungsTracker zeigt transparent, wie weit kommunale Projekte in Karlsruhe vorangeschritten sind – von der Planung bis zur Umsetzung. So behalten Sie den Überblick über die Entwicklung Ihrer Stadt.{% endblock %}" />
|
||
<meta property="og:site_name" content="VerwaltungsTracker" />
|
||
|
||
<link rel="canonical" href="{{ request.build_absolute_uri }}">
|
||
<link rel="stylesheet" href="{% static 'froide_govplan/css/docsearch.css' %}">
|
||
|
||
<link href="https://unpkg.com/maplibre-gl@3.2.1/dist/maplibre-gl.css" rel="stylesheet" />
|
||
<script src="https://unpkg.com/maplibre-gl@3.2.1/dist/maplibre-gl.js"></script>
|
||
|
||
|
||
<!-- Favicons -->
|
||
<link rel="apple-touch-icon" href="{% static 'froide_govplan/images/apple-touch-icon.png' %}" sizes="180x180">
|
||
<link rel="icon" href="{% static 'froide_govplan/images/favicon-32x32.png' %}" sizes="32x32" type="image/png">
|
||
<link rel="icon" href="{% static 'froide_govplan/images/favicon-16x16.png' %}" sizes="16x16" type="image/png">
|
||
<link rel="manifest" href="https://getbootstrap.com/docs/5.3/assets/img/favicons/manifest.json">
|
||
<link rel="mask-icon" href="https://getbootstrap.com/docs/5.3/assets/img/favicons/safari-pinned-tab.svg" color="#712cf9">
|
||
<link rel="icon" href="https://getbootstrap.com/docs/5.3/assets/img/favicons/favicon.ico">
|
||
<meta name="theme-color" content="#712cf9">
|
||
|
||
|
||
<script defer data-domain="verwaltungstracker.de" src="https://analytics.verwaltungstracker.de/js/script.js"></script>
|
||
|
||
{% block header_font %}{% endblock %}
|
||
|
||
{% block css %}
|
||
<link href="{% static 'froide_govplan/css/bootstrap.min.css' %}" rel="stylesheet" crossorigin="anonymous">
|
||
<link href="{% static 'froide_govplan/css/font-awesome.css' %}" rel="stylesheet">
|
||
<style>
|
||
.bd-placeholder-img {
|
||
font-size: 1.125rem;
|
||
text-anchor: middle;
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
@media (min-width: 768px) {
|
||
.bd-placeholder-img-lg {
|
||
font-size: 3.5rem;
|
||
}
|
||
}
|
||
|
||
.b-example-divider {
|
||
width: 100%;
|
||
height: 3rem;
|
||
background-color: rgba(0, 0, 0, .1);
|
||
border: solid rgba(0, 0, 0, .15);
|
||
border-width: 1px 0;
|
||
box-shadow: inset 0 .5em 1.5em rgba(0, 0, 0, .1), inset 0 .125em .5em rgba(0, 0, 0, .15);
|
||
}
|
||
|
||
.b-example-vr {
|
||
flex-shrink: 0;
|
||
width: 1.5rem;
|
||
height: 100vh;
|
||
}
|
||
|
||
.bi {
|
||
vertical-align: -.125em;
|
||
fill: currentColor;
|
||
}
|
||
|
||
.nav-scroller {
|
||
position: relative;
|
||
z-index: 2;
|
||
height: 2.75rem;
|
||
overflow-y: hidden;
|
||
}
|
||
|
||
.nav-scroller .nav {
|
||
display: flex;
|
||
flex-wrap: nowrap;
|
||
padding-bottom: 1rem;
|
||
margin-top: -1px;
|
||
overflow-x: auto;
|
||
text-align: center;
|
||
white-space: nowrap;
|
||
-webkit-overflow-scrolling: touch;
|
||
}
|
||
|
||
.btn-bd-primary {
|
||
--bd-violet-bg: #712cf9;
|
||
--bd-violet-rgb: 112.520718, 44.062154, 249.437846;
|
||
|
||
--bs-btn-font-weight: 600;
|
||
--bs-btn-color: var(--bs-white);
|
||
--bs-btn-bg: var(--bd-violet-bg);
|
||
--bs-btn-border-color: var(--bd-violet-bg);
|
||
--bs-btn-hover-color: var(--bs-white);
|
||
--bs-btn-hover-bg: #6528e0;
|
||
--bs-btn-hover-border-color: #6528e0;
|
||
--bs-btn-focus-shadow-rgb: var(--bd-violet-rgb);
|
||
--bs-btn-active-color: var(--bs-btn-hover-color);
|
||
--bs-btn-active-bg: #5a23c8;
|
||
--bs-btn-active-border-color: #5a23c8;
|
||
}
|
||
|
||
.bd-mode-toggle {
|
||
z-index: 1500;
|
||
}
|
||
|
||
.bd-mode-toggle .dropdown-menu .active .bi {
|
||
display: block !important;
|
||
}
|
||
|
||
.card {
|
||
height: 100%;
|
||
display: flex;
|
||
flex-direction: column;
|
||
}
|
||
.card-body {
|
||
flex-grow: 1;
|
||
display: flex;
|
||
flex-direction: column;
|
||
}
|
||
|
||
.mx-auto {
|
||
max-width: 1320px;
|
||
}
|
||
|
||
.bg-gray-700 {
|
||
background-color: rgba(55,65,81,1);
|
||
border-color: transparent;
|
||
border-radius: .375rem;
|
||
color: rgba(249,250,251,1);
|
||
font-size: .875rem;
|
||
line-height: 1.25rem;
|
||
text-decoration: none;
|
||
display: inline-flex;
|
||
}
|
||
|
||
.ellipsis {
|
||
display: -webkit-box;
|
||
-webkit-line-clamp: 2;
|
||
-webkit-box-orient: vertical;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
}
|
||
|
||
|
||
/* Mobile: nur 1 Slide sichtbar */
|
||
@media (max-width: 768px) {
|
||
.carousel-inner .carousel-item > div {
|
||
display: none;
|
||
}
|
||
.carousel-inner .carousel-item > div:first-child {
|
||
display: block;
|
||
}
|
||
}
|
||
|
||
/* Für alle Carousel-Übergangszustände Flex anzeigen */
|
||
.carousel-inner .carousel-item.active,
|
||
.carousel-inner .carousel-item-start,
|
||
.carousel-inner .carousel-item-next,
|
||
.carousel-inner .carousel-item-prev {
|
||
display: flex;
|
||
}
|
||
|
||
/* Desktop: max. 3 Slides sichtbar */
|
||
@media (min-width: 768px) {
|
||
|
||
.carousel-inner .card {
|
||
margin-right: 1rem;
|
||
height: 360px;
|
||
}
|
||
|
||
.carousel-inner .col-md-4 {
|
||
width: 32% !important;
|
||
}
|
||
|
||
.carousel-inner .carousel-item-right.active,
|
||
.carousel-inner .carousel-item-next,
|
||
.carousel-item-next:not(.carousel-item-start) {
|
||
transform: translateX(32%) !important;
|
||
}
|
||
|
||
.carousel-inner .carousel-item-left.active,
|
||
.carousel-item-prev:not(.carousel-item-end),
|
||
.active.carousel-item-start,
|
||
.carousel-item-prev:not(.carousel-item-end) {
|
||
transform: translateX(-32%) !important;
|
||
}
|
||
|
||
.carousel-item-next.carousel-item-start,
|
||
.active.carousel-item-end {
|
||
transform: translateX(0) !important;
|
||
}
|
||
|
||
.carousel-inner .carousel-item-prev,
|
||
.carousel-item-prev:not(.carousel-item-end) {
|
||
transform: translateX(-32%) !important;
|
||
}
|
||
}
|
||
|
||
@media (max-width: 768px) {
|
||
.search {
|
||
display: none;
|
||
}
|
||
header {
|
||
justify-content: center;
|
||
}
|
||
header img {
|
||
height: 40px !important;
|
||
}
|
||
}
|
||
|
||
</style>
|
||
{% block extra_css %}
|
||
{% endblock %}
|
||
{% endblock %}
|
||
{% render_block "css" %}
|
||
|
||
{% block meta %}
|
||
{# Translators: meta description #}
|
||
{% endblock %}
|
||
|
||
{% block extra_head %}
|
||
{% endblock %}
|
||
</head>
|
||
|
||
<body {% if request.user.is_authenticated %}data-user="{{ request.user.id }}" data-useremail="{{ request.user.email }}"{% endif %}{% block body_extra_attributes %}{% endblock %}>
|
||
{% cms_toolbar %}
|
||
{% block body_tag %}{% block body %}{% block main %}{% endblock %}{% endblock %}{% endblock %}
|
||
{% block extra_footer %}{% endblock %}
|
||
|
||
{% block scripts %}
|
||
<script src="{% static 'froide_govplan/js/bootstrap.bundle.min.js' %}" crossorigin="anonymous"></script>
|
||
<script src="{% static 'froide_govplan/js/jquery-3.6.4.min.js' %}"></script>
|
||
<script lang="javascript">
|
||
|
||
// var myCarousel = document.querySelector('#myCarousel')
|
||
// var carousel = new bootstrap.Carousel(myCarousel, {
|
||
// interval: 100000
|
||
// })
|
||
|
||
$('.carousel .carousel-item').each(function(){
|
||
var minPerSlide = 3;
|
||
var next = $(this).next();
|
||
if (!next.length) {
|
||
next = $(this).siblings(':first');
|
||
}
|
||
next.children(':first-child').clone().appendTo($(this));
|
||
|
||
for (var i=0;i<minPerSlide;i++) {
|
||
next=next.next();
|
||
if (!next.length) {
|
||
next = $(this).siblings(':first');
|
||
}
|
||
|
||
next.children(':first-child').clone().appendTo($(this));
|
||
}
|
||
});
|
||
|
||
|
||
const Ze = t => {
|
||
const e = t.dataset.confirm;
|
||
return e ? !!window.confirm(e) : !0
|
||
};
|
||
const ke = '<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>',
|
||
Ye = t => {
|
||
Array.from(t.querySelectorAll("button, input")).forEach(e => {
|
||
e.getAttribute("type") === "submit" && (e.innerHTML = `${ke}${e.innerHTML}`), e.setAttribute("disabled", "")
|
||
})
|
||
},
|
||
Je = t => {
|
||
Array.from(t.querySelectorAll("button, input")).forEach(e => {
|
||
e.getAttribute("type") === "submit" && (e.innerHTML = e.innerHTML.replace(ke, "")), e.removeAttribute("disabled")
|
||
})
|
||
};
|
||
function Xe() {
|
||
const t = document.querySelectorAll("form.ajaxified");
|
||
Array.from(t).forEach(e => {
|
||
e.addEventListener("submit", n => {
|
||
if (n.preventDefault(), !Ze(e)) return !1;
|
||
const r = e.getAttribute("method") || "post";
|
||
let o = e.getAttribute("action") || "";
|
||
const i = new FormData(e),
|
||
s = Array.from(i).map(c => c.map(l => encodeURIComponent(l)).join("=")).join("&");
|
||
r.toLowerCase() === "get" && (o = `${o}?${s}`);
|
||
const a = new XMLHttpRequest;
|
||
a.open(r, o, !0), a.setRequestHeader("Content-type", "application/x-www-form-urlencoded"), a.setRequestHeader("X-Requested-With", "XMLHttpRequest"), a.onload = () => {
|
||
var l, u;
|
||
if (e.dataset.modalcontainer) {
|
||
const d = document.querySelector(e.dataset.modalcontainer);
|
||
d != null && (new $(d).show(), console.log("got modal"));
|
||
|
||
const modalElement = document.getElementById('govplan-searchmodal-275111');
|
||
const modal = new bootstrap.Modal(modalElement);
|
||
modal.show();
|
||
|
||
} else if (e.dataset.modal) {
|
||
const d = document.getElementById(e.dataset.modal);
|
||
(l = d == null ? void 0 : d.dataset) != null && l.bsTarget && ((u = $.getInstance(document.querySelector(d.dataset.bsTarget))) == null || u.hide())
|
||
}
|
||
const c = a.responseText;
|
||
if (c[0] === "/") {
|
||
window.location.href = c, c.includes("#") && window.location.reload();
|
||
return
|
||
}
|
||
if (e.dataset.container) {
|
||
Je(e);
|
||
const d = document.querySelector(e.dataset.container);
|
||
d != null && (d.innerHTML = c)
|
||
} else {
|
||
const d = e.closest(".ajax-parent");
|
||
if (d != null)
|
||
if (c[0] === "{") {
|
||
const f = JSON.parse(c);
|
||
f.errors && (d.outerHTML = `<div class="alert alert-danger">${f.errors}</div>`)
|
||
} else d.outerHTML = c;
|
||
else e.outerHTML = c
|
||
}
|
||
}, r.toLowerCase() !== "get" ? a.send(s) : a.send(), Ye(e)
|
||
})
|
||
})
|
||
}
|
||
Xe();
|
||
</script>
|
||
{% endblock %}
|
||
{% render_block "js" %}
|
||
|
||
{% block below_scripts %}{% endblock %}
|
||
</body>
|
||
</html>
|